Jos tekstitiedostossa lukee esim.
Yrityksen nimi
Johtaja: "Matti Järvinen"
Yrityksen nimi (eri yritys)
Johtaja: "Maija Virtanen"
Miten saisin luettua yritysten johtajien nimet (lainausmerkkien välistä) muuttujiin ja laittaa ne TextBoxiin jossa niitä voi muokata, ja Command1:stä painettua tiedot päivittyisivät suoraan tekstitiedostoon?
Selkeä kommentoitu koodi olisi avuksi. Kiitos jo etukäteen. :)
InStr-funktion avulla. VB-oppaasta saat tarkempaa tietoa jos tarvit.
data = "Johtaja: 'Matti Järvinen' '(Käytin eri merkkejä) data = mid(data,instr(data,"'") + 1) data = mid(data,1,instr(data,"'") -1)
Ei ehkä täysin oikein, poista + 1 se voi auttaa
Hyvin toimi Quirzo, mutta merkkien pitäisi olla " eikä '. :/
Ja pitäisi tietää vielä miten löydän kyseisen rivin tekstitiedostosta.
Ja pitää olettaa ettei tiedetä mitä lukee lainausmerkkien sisällä, eli etsiä rivi ja sitten lukea/kirjoittaa lainausmerkkien sisälle/sisältä.
Jos lähtötiedoston formaatti on aina tuo sama (nuo kaksi riviä ja niiden jälkeen aina tyhjä rivi), voit lukea kaiken tiedon ohjelmaan ja sitten kirjoittaa (ehkä) muutetun tiedon takaisin.
Kaivanpa tässä pohjattomasta hatustani koodin lukemiseen; kirjoitukseen tarvittavan koodin saat keksiä itse ^_-
Type Tiedot YNimi As String JNimi As String End Type Dim ff As Integer, vali As String Dim KaikkiTiedot(1 To 200) As Tiedot, Luettu As Integer Luettu = 0 ff = FreeFile Open tiedoston_nimi For Input As #ff While Not EOF(ff) Luettu = Luettu + 1 Line Input #ff, KaikkiTiedot(Luettu).YNimi '' Rivi muotoa: 'Johtaja: "nimi"', '' ^ ^ '' eli nimi alkaa kohdasta 11 ja jatkuu Len - 1:een asti. Line Input #ff, vali KaikkiTiedot(Luettu).JNimi = Mid$(vali, 11, Len(vali) - 1) '' Lue vielä tyhjä rivi; sitten jatkuu. Line Input #ff, vali Wend Close #ff
Tuon jälkeen kaikki tarvittava data on tiedossa; tietojen lukumäärä (Luettu), ja tiedot taulukoituna.
Formaatti ei välttämättä aina ole sama. Joten tämäkin yritys mönkään. :'(
No, sitten etsitään vaihtoehtoinen ratkaisu. Onko kuitenkin tuo rivi 'Johtaja: "<nimi>"' aina samankaltainen, vaikka sijaitseekin vähän missä sattuu? Ja onko yrityksen nimi aina ko. rivin yläpuolella?
sqwiik kirjoitti:
No, sitten etsitään vaihtoehtoinen ratkaisu. Onko kuitenkin tuo rivi 'Johtaja: "<nimi>"' aina samankaltainen, vaikka sijaitseekin vähän missä sattuu? Ja onko yrityksen nimi aina ko. rivin yläpuolella?
Kyllä formaatti on aina
Johtaja: "<nimi>"
ja yrityksen nimi on aina rivin yläpuolella. Ajattelitko että etsitään yrityksen nimi (koska se tiedetään etukäteen) ja katsotaan 1 rivi sen alapuolelta ja napataan <nimi> välistä? Se saattaisi toimia.
Tuossa yksi tapa. Alla ei ole mitään sellaista mitä ei olisi löytänyt haulla.
Private Sub EtsiPomot() Dim KokoRoska As String Dim rivi As String Dim splitti() As String Dim osat() As String Dim pomot() As String Open "c:\pomot.txt" For Input As #1 KokoRoska = Input(LOF(1), #1) 'luetaan muuttujaan koko tiedoston sisältö Close #1 splitti = Split(KokoRoska, vbCrLf) 'taulukoidaan tiedot rivinvaihtojen kohdalta ReDim pomot(0) 'alustetaan pomo-taulukko For Each rivi In splitti 'käydään splitti-taulukon rivit läpi yksi kerrallaan If InStr(1, rivi, Chr(34)) Then 'tarkistetaan sisältääkö kyseinen rivi lainausmerkkiä. chr(34) = " osat = Split(rivi, Chr(34)) 'pilkotaan rivi osiin lainausmerkkien kohdalta If LenB(pomot(0)) <> 0 Then ReDim Preserve pomot(UBound(pomot) + 1) pomot(UBound(pomot)) = osat(1) 'osat(0) sisältää kaiken lainausmerkkiä edeltävän ja osat(2) on tyhjä MsgBox "Johtaja " & osat(1) & " lisätty listaan." End If Next rivi If LenB(pomot(0)) <> 0 Then MsgBox UBound(pomot) & " johtajaa löydetty." End Sub
BadSource: Muuten hyvä mutta koodi ei toimi eikä tee mitä pyysin. :/
Karkeasti:
Etsitään yrityksen nimi, luetaan rivi sen alapuolelta, otetaan teksti lainausmerkkien sisältä, teksti textboxiin ja sitten nappulaa painamalla katsotaan mitä textboxissa on ja kirjoitetaan se vanha tilalle.
Jaa-, että pomon nimi etsitään yrityksen nimen perusteella? Silloinhan homma helpottuu huomattavasti.
Tässä etsiminen; saat tämän kautta tietää nimen lisäksi rivin, jolla ko. tieto on.
Dim ff As Integer, nimi As String, rivi as Integer, vali As String ff = FreeFile Open tiedoston_nimi For Input As #ff Do While Not EOF(ff) Line Input #ff, vali rivi = rivi + 1 ' Nimi atlteen & pois loopista If vali = yrityksen_nimi Then nimi = vali Exit Loop End If Loop Close #ff
Nyt on tiedossa rivi 'Johtaja "<nimi>"', josta saat edellä mainittuja soveltaen nimen irti.
Sitten vain korvaat uudella tekstillä ('Johtaja "<uusinimi>"') samaisen rivin tiedostosta.
Hmm laitoin tämän jälkeen:
MsgBox nimi
ja se sanoi yrityksen_nimen Johtajan nimen sijasta. :/
PS. Ja rivikin on sama missä on yrityksen_nimi. :)
No pyörkele, ajatushärö. Jäi laittamatta jotain välistä ^_-
' if-lause seuraavasti: If vali = yrityksen_nimi Then Line Input #ff, nimi rivi = rivi + 1 Exit Loop End If
Exit Loop vaan Exit Do:ksi niin toimii. :)
Kiitos sqwiik!
EDIT: Vielä pitäisi lukea lainausmerkkien sisältä... :(
Äh selvitin jo.
Aihe on jo aika vanha, joten et voi enää vastata siihen.