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?
Tiettyjen rivien haku tiedostosta
7
657
Vastaukset
- 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 FunctionAnteeksi, 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
Kalle Palander kertoi fantasioivansa siitä, kuinka Kiira Korpi naisi häntä sträppärillä ahteriin
Sai potkut Yleltä. https://yle.fi/a/74-201400004777030- 262541
- 2212513
- 1491814
- 1141718
Nyt mielipiteitä kehiin?
Niin ,onko arvon kuhmolaiset teidän mielestänne kaupungin hommissa turhia työpaikkoja/työntekijöitä? Mielipiteitä tu621128- 741123
IS: Paljastus - Tästä syystä Marika jätti Diilin kesken -Tilittää: "Jäi vähän karvas maku, koska..."
Diilissä lähti yllättäen yksi kisaaja. Voi harmi, leikki loppui liian varhain… Diilissä Jaajo Linnonmaa etsii vetäjää Ka41115Martina miehensä kanssa Malediiveilla.
Miksi täällä puhutaan erosta? Lensivät Dubaista Malediiveilĺe.138104224h Kirppis
Olen muuttamassa paikkakunnalle ja mietin olisiko tälläiselle liikkeelle tarvetta alueella?11037