Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: tietty rivi tiedostosta *QB* (VB6)

juhaz [23.10.2004 23:25:29]

#

En ole vieläkään tajunnut tätä, mutta olisi tarvetta sillaiselle koodille, joka ensin katsoisi tiedostosta tiedot ja sitten poistaisi käyttäjän haluaman tiedon sieltä.

Esimerkiksi jos käyttäjä antaa komennon "dir" niin se avaisi vaikka hakemisto.txt tiedoston ja näyttäisi sen sisällön esim:
ohjelma.exe
ohjelma.txt
peli.exe
peli.txt

ja käyttäjä antaisi sitten komennon "del ohjelma.exe" ja laittaisi uudelleen komennon "dir" niin sieltä olisikin kadonnut tuo ohjelma.exe.

tuomas [23.10.2004 23:43:53]

#

Eli aluksi luet tiedoston sisällön taulukkoon, yksi rivi aina yhteen soluun.
esim.

Dim Taulu(1 To 5) As String

Open App.Path & "\filu.txt" for Input As #1

     Do Until EOF(1)
        R = R + 1
        Line Input#1, Rivi
        Taulu(R) = Rivi
     Loop

Close #1

Nyt kun sinulla on taulukossa tiedot, vertaillaan sieltä löytyviä merkkijonoja:

Sub Del(Etsittävä As String)
For I = 1 To 5
    If Taulu(I) = Etsittävä Then
       Taulu(I) = ""
    End if
Next
End Sub

Mikäli siis etsittävä merkkijono löytyy se poistetaan.
Sitten jäljelle jää enään tallennus,

Open App.Path & "\filu.txt" For Output As #2
     For I = 1 To 5
         'tarkistetaan ettei tiedostoon tule tyhjiä rivejä.
         If Taulu(I) <> "" Then
            'vbcrlf tarkoittaa rivin vaihtoa
            Print#2, Taulu(I) &vbcrlf
         End if
     Next
Close #2

Koodit on heitetty lonkalta joten toimivuutta en takaa..

EDIT:
Ja nyt sitten vasta huomasin että kyseinen olisi tullut qb:lle :(
No kaipa tuosta vb koodista idean ymmärrät...

rndprogy [23.10.2004 23:49:42]

#

Laittamalla nuo taulukkoon

a$(0) = "ohjelma.exe"
a$(1) = "ohjelma.txt"
jne...

jos haluat poistaa, tarkistetaan onko sana taulukossa

for q = 0 to 3
if a$(q) = "ohjelma.exe" then a$ = ""
next

ja tallennat ne uudelleen taulukkoon

for q = 0 to 3
if a$(q) <> "" then a$(q) = a$(q)
next

Edit: Empä tietenkään ehtinyt ensiksi. Ja sitä paitsi Tuomas. Kyse oli QBasicista

setä [24.10.2004 11:07:36]

#

Voihan tuon ehkä noinkin tehdä, kuten tuomas esitti mutta mieluummin kannattaisi käyttää FileListBoxia. Asetetaan kontrollin polku haluttuun kansioon, klikataan poistettavaa tiedostoa ja poistetaan Kill-käskyllä.
QB:llä tämä ei onnistu, mutta rndprogyn ohjeilla korjaamalla edellisen silmukan ehtolauseen niin, että poistetaan tiedosto eikä vain luettelosta tyhjätä ko. tiedostonimeä. Jälkimmäinen silmukka on tarpeeton.

hunajavohveli [24.10.2004 11:33:53]

#

Tuomaksen koodia voinee käyttää suoraan QB:llä. App.Path on kuitenkin muutettava CURDIR$-funktioksi, joka ei tosin toimi alkuperäisessä QBasicissa. Tuota &vbcrlf:iä en tunne, mutta kai sekin voidaan jotenkin korvata. Muuten koodi taitaa toimia QB:llä aivan samassa muodossa, siis olettaen, että tuo nyt sitten toimii, jos sitä ei kerran ole testattu.

rndprogy [24.10.2004 12:27:43]

#

hunajvohveli kirjoitti:

&vbcrlf:iä en tunne, mutta kai sekin voidaan jotenkin korvata

Se on rivinvaihto.

Blaze [24.10.2004 12:30:22]

#

hunajavohveli kirjoitti:

Tuota &vbcrlf:iä en tunne, mutta kai sekin voidaan jotenkin korvata.

vbCrLf on merkkijonovakio (tuo & tuossahan on siis merkkijonojen yhdistysoperaattori, välilyönti vaan jäänyt pois, niin näyttää hassulta), jossa on rivinvaihtomerkki. QB:ssä sen voi korvata Chr$(13) & Chr$(10)

Vastaus

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

Tietoa sivustosta