Tiettyjen rivien haku tiedostosta

minähänse

Ohjelmani pitäisi siis osata hakea jostain tekstitiedostosta esimerkiksi vaikkapa rivi 2 jossa oleva lause voi olla usealla eri rivillä esimerkiksi jos tiedoston sisältö näyttää tältä:

tässä
on tekstiä
*
rivi1
rivi2
rivi3
rivi4
*
abc123

Jos haluan hakea tuosta tiedostosta vaikkapa 2 jutun eli nuo rivi1, rivi2, rivi3 ja rivi4:sen niin kuinka se tehdään?

7

708

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Orwell

      Tarkoititko mahdollisesti jotain tällaista?

      Dim sLines As String
      Dim sTmp As String

      sLines = vbNullString

      Open [TIEDOSTOPOLKU] For Input As #1
      Do Until EOF(1)
      Line Input #1, sTmp
      If sTmp Like "rivi*" Then sLines = sLines & sTmp & vbCrLf
      Loop
      Close #1

      Pitäsisi palauttaa:
      rivi1
      rivi2
      rivi3
      rivi4

    • Kunde

      Käytän itse tällaista. Kirjoita tekstitiedosto muotoon

      $10
      heippa
      moro
      terve
      $20
      hei
      moi mitä kuuluu?

      ja sitten vain haet seuraavalla proseduurilla tekstin

      Sub Koe()
      x = LueTekstiFile("C:\Testi.txt", "$20", 2)
      MsgBox x
      End Sub

      tämä palauttaa siis moi mitä kuuluu?

      Function LueTekstiFile(TekstiFile As String, Dollar As String, Tekstirivi As Long) As Variant

      Dim Dollarimerkki As String
      Dim Teksti As String
      Dim Rivimäärä As Long
      Dim Dollariteksti As Boolean
      Dim Pituus As Long
      Dim Tarkiste As Long
      Dim Omatarkiste As Long
      Dim Viesti As String

      On Error GoTo virhe
      Dollarimerkki = "*" & Dollar & "*"
      Open TekstiFile For Input As #1
      Do While Not EOF(1)
      Line Input #1, Teksti
      If Teksti Like Dollarimerkki Then
      Dollariteksti = True
      Rivimäärä = 0
      End If

      If Dollariteksti = True Then
      If Rivimäärä = Tekstirivi Then
      Omatarkiste = InStr(1, Teksti, (Chr(39)))
      If Omatarkiste > 0 Then
      Pituus = Len(Teksti)
      Tarkiste = InStr(1, Teksti, (Chr(39)))
      If Tarkiste > 0 Then
      LueTekstiFile = Mid(Teksti, 1, (Tarkiste - 2))
      If LueTekstiFile = "False" Or LueTekstiFile = "True" Then
      LueTekstiFile = CBool(LueTekstiFile)
      Exit Do
      ElseIf IsNumeric(LueTekstiFile) = True Then
      LueTekstiFile = CDbl(LueTekstiFile)
      Exit Do
      Else
      LueTekstiFile = CStr(LueTekstiFile)
      Exit Do
      End If
      End If
      ElseIf Omatarkiste = 0 Then
      LueTekstiFile = Teksti
      If LueTekstiFile = "False" Or LueTekstiFile = "True" Then
      LueTekstiFile = CBool(LueTekstiFile)
      Exit Do
      ElseIf IsNumeric(LueTekstiFile) = True Then
      LueTekstiFile = CDbl(LueTekstiFile)
      Exit Do
      Else
      LueTekstiFile = CStr(LueTekstiFile)
      Exit Do
      End If
      End If
      End If
      Rivimäärä = Rivimäärä 1
      End If
      Loop

      Close #1
      virhepoistu:
      Exit Function
      virhe:
      Close #1
      Viesti = Err.Description & " " & Err.Number
      MsgBox Viesti, vbCritical, "Tiedostosta luku"
      Resume virhepoistu
      End Function

      • minähänse

        ...mutta tuossa on määriteltävä minkä yksittäisen rivin haluan hakea siitä.

        x = LueTekstiFile("C:\Testi.txt", "$20", 2)
        Siis tämähän hakee vain tuon 2 rivin tuosta "$20" kohdasta eli tuon "moi mitä kuuluu?", mutta kuinka saisin siten, että se hakisi ne kaikki muutkin rivit myöskin tuon "hei" sanan riippumatta siitä kuinka monta riviä siinä on aina tekstiä.


      • Orwell
        minähänse kirjoitti:

        ...mutta tuossa on määriteltävä minkä yksittäisen rivin haluan hakea siitä.

        x = LueTekstiFile("C:\Testi.txt", "$20", 2)
        Siis tämähän hakee vain tuon 2 rivin tuosta "$20" kohdasta eli tuon "moi mitä kuuluu?", mutta kuinka saisin siten, että se hakisi ne kaikki muutkin rivit myöskin tuon "hei" sanan riippumatta siitä kuinka monta riviä siinä on aina tekstiä.

        Tarkoituksesi oli siis lukea *-merkin välissä olevat rivit?

        Dim bStart As Boolean
        Dim sLines As String
        Dim sTmp As String

        bStart = False
        sLines = vbNullString

        Open App.Path & "\test.txt" For Input As #1
        Do Until EOF(1)
        Line Input #1, sTmp

        If Trim$(sTmp) = "*" And Not bStart Then
        bStart = True
        ElseIf Trim$(sTmp) = "*" And bStart Then
        bStart = False
        ElseIf bStart Then
        sLines = sLines & sTmp & vbCrLf
        End If
        Loop
        Close #1

        Tämä koodin pätkä palauttaa *-merkkien välistä kaikki rivit, vaikka niitä olisi useampi.


      • minähänse
        Orwell kirjoitti:

        Tarkoituksesi oli siis lukea *-merkin välissä olevat rivit?

        Dim bStart As Boolean
        Dim sLines As String
        Dim sTmp As String

        bStart = False
        sLines = vbNullString

        Open App.Path & "\test.txt" For Input As #1
        Do Until EOF(1)
        Line Input #1, sTmp

        If Trim$(sTmp) = "*" And Not bStart Then
        bStart = True
        ElseIf Trim$(sTmp) = "*" And bStart Then
        bStart = False
        ElseIf bStart Then
        sLines = sLines & sTmp & vbCrLf
        End If
        Loop
        Close #1

        Tämä koodin pätkä palauttaa *-merkkien välistä kaikki rivit, vaikka niitä olisi useampi.

        Kyllähän tuo toimii, mutta en hae tuollaista koodia.


      • Kunde
        minähänse kirjoitti:

        Kyllähän tuo toimii, mutta en hae tuollaista koodia.

        Nyt lukee dollarimerkkien välisen tekstin

        Sub Koe()
        x = LueTekstiFile("C:\Testi.txt", "$20")
        MsgBox x
        End Sub

        Function LueTekstiFile(TekstiFile As String, Alkurivi As String) As Variant

        Dim Dollarimerkki As String
        Dim Teksti As String
        Dim Rivimäärä As Long
        Dim Dollariteksti As Boolean
        Dim Pituus As Long
        Dim Tarkiste As Long
        Dim Omatarkiste As Long
        Dim Viesti As String

        On Error GoTo virhe
        Dollarimerkki = "*" & Alkurivi & "*"
        Open TekstiFile For Input As #1
        Do While Not EOF(1)
        Line Input #1, Teksti
        If Teksti Like Dollarimerkki Then
        Dollariteksti = True
        End If

        If Dollariteksti = True Then
        If Teksti = Alkurivi Then GoTo hyppy
        If Teksti Like "*$*" Then GoTo loppu
        LueTekstiFile = LueTekstiFile & Teksti & vbNewLine
        End If
        hyppy:
        Loop
        loppu:
        Close #1
        virhepoistu:
        Exit Function
        virhe:
        Close #1
        Viesti = Err.Description & " " & Err.Number
        MsgBox Viesti, vbCritical, "Tiedostosta luku"
        Resume virhepoistu
        End Function


      • minähänse
        Kunde kirjoitti:

        Nyt lukee dollarimerkkien välisen tekstin

        Sub Koe()
        x = LueTekstiFile("C:\Testi.txt", "$20")
        MsgBox x
        End Sub

        Function LueTekstiFile(TekstiFile As String, Alkurivi As String) As Variant

        Dim Dollarimerkki As String
        Dim Teksti As String
        Dim Rivimäärä As Long
        Dim Dollariteksti As Boolean
        Dim Pituus As Long
        Dim Tarkiste As Long
        Dim Omatarkiste As Long
        Dim Viesti As String

        On Error GoTo virhe
        Dollarimerkki = "*" & Alkurivi & "*"
        Open TekstiFile For Input As #1
        Do While Not EOF(1)
        Line Input #1, Teksti
        If Teksti Like Dollarimerkki Then
        Dollariteksti = True
        End If

        If Dollariteksti = True Then
        If Teksti = Alkurivi Then GoTo hyppy
        If Teksti Like "*$*" Then GoTo loppu
        LueTekstiFile = LueTekstiFile & Teksti & vbNewLine
        End If
        hyppy:
        Loop
        loppu:
        Close #1
        virhepoistu:
        Exit Function
        virhe:
        Close #1
        Viesti = Err.Description & " " & Err.Number
        MsgBox Viesti, vbCritical, "Tiedostosta luku"
        Resume virhepoistu
        End Function

        Anteeksi, että vastaukseni kesti näin kauan ja samalla Kiitoksia todella paljon!
        Tämä oli juuri se mitä tarvitsinkin.
        Koodi toimii erinomaisesti.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Näitä venäjä-faneja tuntuu edelleen vaan riittävän - kummallista

      ja lähinnä siis ihan suomalaisia. Mitä hienoa ja hyvää he näkevät maassa joka on diktatuuri, maassa jossa ei ole sananv
      Maailman menoa
      412
      3259
    2. Sanna on pakottaja, domina

      Pakotti sadistisessti työttömät hakemaan töitä, josta seurasi hirmuinen työttömyys. Näin on asia, jos uskomme Hesarin k
      Maailman menoa
      100
      2426
    3. Ulkoistin makuaistini Yleisradiolle

      Nyt voimme luottaa siihen, että Virallinen Totuus tekee maistelutyön puolestamme. Me persulandiassa arvostamme priimaa,
      Maailman menoa
      1
      2339
    4. On ilmiselvää, että väärä maahanmuutto on Suomea pilannut jo paljon

      Väärä maahanmuutto tarkoittaa siis tulijoita Lähi-Idän ja Afrikan islamilaisista maista, eli muslimeita. He ovat kiistat
      Maailman menoa
      42
      2275
    5. Skodan hankintaan painostaminen toi potkut

      Kylläpä on kovat keinot käytössä, kun on yritetty pakottaa hankkimaan Skoda painostuskeinoilla. Kyllä valinnan pitää oll
      Skoda
      24
      2042
    6. Niinistö neliraajajarrutteli Natoon liittymistä vielä sodan alettua

      Myöntää nyt itsekin, mikä jo aikaisemmin tiedettiin. Marin vei Suomen ja Ruotsin Natoon. "”Myönnän auliisti jarruttelle
      Maailman menoa
      190
      1544
    7. Kokoomus on Suomen kommunistisin puolue

      "Hallituksessa on erimielisyyttä siitä, kuinka suuri osa veronkiristyksestä hyvitetään datakeskuksille uudella erillisel
      Maailman menoa
      12
      1362
    8. Sukupuolen merkitys elämässäsi?

      Jäin tuossa toista ketjua lukiessani miettimään seuraavaa ... Kuinka paljon koet sukupuolesi vaikuttavan/vaikuttaneen el
      Sinkut
      202
      1160
    9. Kyllä minua hävettää nainen tämä tilanne

      niin kuin se teki silloin aiemminkin. Monellakin tasolla ei minulta sopivaa. Herätät minussa vain niin vahvoja tunteita,
      Ikävä
      44
      1122
    10. Nainen rakas

      Mulle on alkanut tulla sellainen olo että meistä tulee ehkä pariskunta vielä 😌
      Ikävä
      93
      1051
    Aihe