Private Sub Command1_Click()
Text1.Text = ""
Text2.Text = ""
CommonDialog1.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
CommonDialog1.ShowOpen 'display Open dialog box
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Input As #1
Do Until EOF(1)
Text1.Text = Input(LOF(1), #1)
Loop
Close #1
Taulu1 = Split(Text1.Text, vbCrLf)
For i = 0 To UBound(Taulu1)
If Taulu1(i)= "mopo" Then
Text2.Text = Text2.Text + Taulu1(i) + vbCrLf
End If
Next
End If
End SubMiksiköhän en saa luettua tiedoston kaikkia riviä teksti objektiin? Katkeaa aina jossain 3500 rivin tuntumassa. Oiskohan parempaa tapaa lukea tiedoston rivejä taulukkoon.Rivit on eri pituisia (1-100 merkkiä) merkkijonoja joista pitää poimia tietyn merkkijonon sisältät rivit toiseen tekstikenttään.
(Mod. Edit. Kooditagit.)
VB:ssä merkkijonomuuttujien maksimipituus on 65536 (2^16) merkkiä. Tekstilaatikon tekstin maksimipituus ollee sama.
RichTextBoxiin saa yli 65536 merkkiä. Sillä pitäis onnistuu, jos ei tavallisella onnistu.
Kiitoksia, tulipahan tuotakin ihmeteltyä puoli päivää.
Oisko ehdotuksia miten tehdä kun tuntuu kestävän jos muuttujaan lukee rivin kerrallaan?
Heippa!
'tässä ei tarvita Do...Loop'ia
Do Until EOF(1)
Text1.Text = Input$(LOF(1), 1)
'koska tämä osa lukee kerralla
'koko tiedoston Tekstiboxiin...jos pystyy
'sama 65536-merkin rajoite pätee tässäkin'...
Open CommonDialog1.FileName For Input As #1
'voisit tehdä tarkistuksen ennen lukua esim. näin
If LOF(1) <= 65536 Then
RichTextBox1.Text = Input$(LOF(1), 1)
Else
Dim pituus, loput, taulu() As String
pituus = LOF(1) / 65536
If InStr(CStr(pituus), ".") > 0 Then
taulu = Split(CStr(pituus), ".")
Else
ReDim taulu(0) As String
taulu(0) = CStr(pituus)
End If
For i = 1 To CLng(taulu(0))
Dim rivit As String
rivit = Input$(65536, 1)
RichTextBox1.Text = RichTextBox1.Text & rivit
Seek 1, 65536 * i + 1
If UBound(taulu) = 1 Then
loput = LOF(1) - (65536 * i)
End If
Next i
If loput > 0 Then
rivit = Input$(loput, 1)
RichTextBox1.Text = RichTextBox1.Text & rivit
End If
End If
Close #1
'...-Nea-
kayttaja-2087 kirjoitti:
Oisko ehdotuksia miten tehdä kun tuntuu kestävän jos muuttujaan lukee rivin kerrallaan?
Miten paljon rivejä on kaikkiaan ja miten kauan niiden luku saa kestää?
Miljoonan rivin (50 Mt) luku kestää minulla pari sekuntia, jos rivit lukee yksi kerrallaan.
Antti Laaksonen kirjoitti:
Miten paljon rivejä on kaikkiaan ja miten kauan niiden luku saa kestää?
Miljoonan rivin (50 Mt) luku kestää minulla pari sekuntia, jos rivit lukee yksi kerrallaan.
No huomenta.
Rivejä tuskin koskaan tulee miljoonaa, noin 200 tuhatta.
Hitaus näyttäis tulevankin lähinnä tosta merkkijonojen vertaamisesta ja kirjottamisesta teksti kenttään.
Kiitoksia Nea:lle.
Merkkijono on hidas kapine VB:llä. Yritä vaikka käyttää merkkitaulukkoja. Tosin silloinkin richtextboxiin tekstin laittaminen voi muodostua hitaaksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.