Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tekstitiedoston lukeminen muistiin

Sivun loppuun

kayttaja-2087 [05.03.2008 14:14:37]

#

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.)

Blaze [05.03.2008 14:44:56]

#

VB:ssä merkkijonomuuttujien maksimipituus on 65536 (2^16) merkkiä. Tekstilaatikon tekstin maksimipituus ollee sama.

Newb [05.03.2008 15:10:28]

#

RichTextBoxiin saa yli 65536 merkkiä. Sillä pitäis onnistuu, jos ei tavallisella onnistu.

kayttaja-2087 [05.03.2008 16:43:41]

#

Kiitoksia, tulipahan tuotakin ihmeteltyä puoli päivää.
Oisko ehdotuksia miten tehdä kun tuntuu kestävän jos muuttujaan lukee rivin kerrallaan?

neau33 [05.03.2008 18:11:30]

#

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-

Antti Laaksonen [05.03.2008 18:19:46]

#

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.

kayttaja-2087 [06.03.2008 07:04:02]

#

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.

kayttaja-4976 [06.03.2008 15:35:55]

#

Merkkijono on hidas kapine VB:llä. Yritä vaikka käyttää merkkitaulukkoja. Tosin silloinkin richtextboxiin tekstin laittaminen voi muodostua hitaaksi.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta