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 Sub
Miksikö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.