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
715
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
- 213600
Olit ihan
Kiihkona silloin. Sen näki ja lähes tunsi. Ei tainnut olla kaukana et olisit vetänyt lähellesi jos siihen olisi hetki tu303413Miksiköhän vasemmistossa on niin paljon ns. tapatyöttömiä ja muita köyhiä?
Tokihan Minja Koskela oli sitä mieltä, että ei terveenkään ihmisen ole pakko tehdä töitä, sitä neuvoa moni vassu noudatt503371Oletko keskustellut kaivatustasi muiden
Kanssa lähiaikoina? Jos, onko keskustelu ollut positiivista tai negatiivista? Vaikuttaako keskustelut mielipiteeseesi ka513045Trump huonommassa kunnossa kuin Usasta virallisesti sanotaan?
"Terveys on vakaa mutta ei normaali".Uskallan melkein sanoa,että Trumpin terveydentilaa kaunistellaan.Myös se että se nu1222849Kyllä on Vasemmistoliitosta Koskelan johdolla tullut todellinen ääripuolue
se on niin tulipunainen kuin olla voi, ja selvästi haluaa jatkuvasti eripuraa, ja repiä kansaa kahtia. Siinä on jo vuod212608Suomen veroaste 5 %-yks liian matala
Palauttamalla kokonaisveroaste 1990-luvun tasolle saadaan hyvinvointivaltion palvelut rahoitettua ilman velan ottoa.1142332MTV: Harvinainen haastattelu! Vappu Pimiä kommentoi vihdoinkin uutta TTK-juontajaa
TTK-juontajaspekuloinnit käyvät edelleen kuumana. Kenet sinä haluaisit uudeksi TTK-juontajaksi? Kommentoi alle! Lue,142145Yleveron tuotto siirrettävä S-ryhmälle
Yleisradio on mukana kansanmurhassa. Tuollaista ei voi tukea verovaroin. S-ryhmä on ainoa selkärankainen iso toimija S281737IL- KELA:n pääjohtaja, lääke- ja oikeustieteen tohtori Lasse Lehtonen sekavassa tilassa Brysselissä!
"Iltalehden tietojen mukaan Lehtosen käytös Brysselin lentokentällä on herättänyt huomiota, ja hänen olemuksensa on tulk1341370