Jag skulle vilja få reda på hur man på det snabbaste sättet lägger in en sträng i en array, alltså ett tecken i varje variabel i arrayen. (OBS lång sträng uppemot 100.000 tecken) Någon som vet? Det snabbaste sättet är i såfall att inte göra det ;) Hej Hej Här kommer en sån här go test igen. Jo, jag kom på själv senare att det kanske inte var så smart att lägga den i en array utan som ni säger använda mid-funktionen. Men jag ska testa era sätt oxå, får se vilket som blir bäst.Sträng till Array
/ CarlSv: Sträng till Array
Jag skulle förslå dig att då betrakta funktionen mid$ som din variabel.
Du slipper slösa med minne.
Du spar tiden det tar att lägga in alla tecken i arrayen.
Du indexerar i din "mid$"-array genom att ändra start-värdet.
Du kan skicka den till andra funktioner och returnera den från funktioner.
Som jag ser det finns ingen anledning att splitta upp din sträng till en
array.
/peterhSv: Sträng till Array
>Det snabbaste sättet är i såfall att inte göra det ;)
iofös. har jag märkt att du är lite småknäpp
men svaret ovan får du indentera ut på sopbacken.
>Som jag ser det finns ingen anledning att splitta upp din sträng till en
array.
Hur fae.... kan du veta det .
Den kommentaren hamnar i Gästboken under Paj Kastning
Veckans "Besserwisser" kommentar.
Sven :-(Sv: Sträng till Array
Så här skulle en principlösning kunna se ut.
Option Explicit
'Förutsätter att du har strängen i en fil (tex. textfil)
'men det kan vara i princip vilken typ av fil som helst
'om strängen finns As String får du ta reda på längden
'och köra Forsatsen 1 To Len(minStr)
' testArray(i) = Mid$(minStr,i,1))
Private Sub Command1_Click()
Dim testArray() As Byte, retByte As Byte
Dim FileNum As Long, i As Long, byteLength As Long
FileNum = FreeFile
Open "C:\Detlog.txt" For Binary As #FileNum
byteLength = LOF(FileNum)
ReDim testArray(byteLength)
For i = 1 To byteLength
Get #FileNum, i, testArray(i)
Next 'i
Close #FileNum
Label1 = UBound(testArray)
End Sub
Sven (som inte bryr sig, om varför du vill göra så här)Sv: Sträng till Array
Kom ihåg att tiden det tar att konvertera strängen till en array inte är med.
Har testat några olika saker man kan göra genom att använda mid eller
array. Ganska likvärdigt tycker jag, så det är upp till den som
programmerar var man vill lägga besväret.
OBS. Testen tar väll ett par/tre minuter att köra på min jobbetburk
en PIII nånting ?
Sample Code ====================================
Option Explicit
Option Base 1
Private arrTimes(10) As Single
Private midTimes(10) As Single
Private Sub Form_Activate()
Me.Print "Resultat" & vbTab & vbTab & "(1)" & vbTab & "(2)" & vbTab & "(3)" & vbTab & "(4)" & vbTab & "(5)"
Me.Print "========================================================"
Me.Print "Array:" & vbTab & vbTab & Format(arrTimes(1), "0.000") & _
vbTab & Format(arrTimes(2), "0.000") & _
vbTab & Format(arrTimes(3), "0.000") & _
vbTab & Format(arrTimes(4), "0.000") & _
vbTab & Format(arrTimes(5), "0.000")
Me.Print "Mid:" & vbTab & vbTab & Format(midTimes(1), "0.000") & _
vbTab & Format(midTimes(2), "0.000") & _
vbTab & Format(midTimes(3), "0.000") & _
vbTab & Format(midTimes(4), "0.000") & _
vbTab & Format(midTimes(5), "0.000")
Me.Print
Me.Print
Me.Print "Test (1) = Print"
Me.Print "Test (2) = Funktionsanrop"
Me.Print "Test (3) = Swap"
Me.Print "Test (4) = Print five in a row"
End Sub
Private Sub Form_Load()
Dim a As String
Dim t As String
Dim b(102399) As String
Dim c(2500) As Long
Dim i As Long
Dim s As Single
a = "ABCDEABCDEABCDEABCDEABCDE"
a = a & a: a = a & a: a = a & a: a = a & a
a = a & a: a = a & a: a = a & a: a = a & a
a = a & a: a = a & a: a = a & a: a = a & a
For i = LBound(b()) To UBound(b())
b(i) = Chr(65 + (i Mod 5))
Next i
For i = LBound(c()) To UBound(c())
c(i) = Int(UBound(b()) * Rnd) + 1
Next i
'START TEST'
s = Timer
For i = LBound(c()) To UBound(c())
Debug.Print b(c(i));
Next i
arrTimes(1) = Timer - s
s = Timer
For i = LBound(c()) To UBound(c())
t = successor(b(c(i)))
Next i
arrTimes(2) = Timer - s
s = Timer
For i = LBound(b()) To UBound(b()) - 1
t = b(i + 1)
b(i + 1) = b(i)
b(i) = t
Next i
arrTimes(3) = Timer - s
s = Timer
For i = LBound(b()) To UBound(b()) - 5 Step 5
Debug.Print b(1), b(2), b(3), b(4), b(5)
Next i
arrTimes(4) = Timer - s
s = Timer
For i = LBound(c()) To UBound(c())
Debug.Print Mid(a, c(i), 1);
Next i
midTimes(1) = Timer - s
s = Timer
For i = LBound(c()) To UBound(c())
t = successor(Mid(a, c(i), 1))
Next i
midTimes(2) = Timer - s
s = Timer
For i = LBound(b()) To UBound(b()) - 1
t = Mid(a, i + 1, 1)
Mid(a, i + 1, 1) = Mid(a, i, 1)
Mid(a, i, 1) = t
Next i
midTimes(3) = Timer - s
s = Timer
For i = LBound(b()) To UBound(b()) - 5 Step 5
Debug.Print Mid(a, i, 5)
Next i
midTimes(4) = Timer - s
End Sub
Private Function successor(char As String) As String
successor = Chr(Asc(char) + 1)
End Function
Sample Code ====================================Sv: Sträng till Array
/ Carl