Brisanje iz TXT datoteke

Pomoč pri izdelavi makrov
Odgovori
ROBERT
Prispevkov: 29
Pridružen: Sr Sep 14, 2005 9:55 am

Brisanje iz TXT datoteke

Odgovor Napisal/-a ROBERT »

Pozdravljen ...

Imam namreč težavo pri brisanju določene vrstice v TXT datoteki.
Podatke vnašam preko kode iz prog. VB6 in sicer s spremenljivko string * 20 itd.

Te podatke člahko iščem, seštevam, nikakor pa mi ne uspe izpeljati formulo, da bi določen podatek oziroma vrstico izbrisal in da ta ne bi bila več v tej bazi.

Upam, da sem bil dovolj jasen, če ne bom pa kasneje še kaj dodal.

Že v naprej se lepo zahvaljujem za pomoč.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Brisanje iz TXT datoteke

Odgovor Napisal/-a admin »

Pozdravljeni,
ROBERT napisal/-a:...nikakor pa mi ne uspe izpeljati formulo, da bi določen podatek oziroma vrstico izbrisal...
Kako pa si predstavljate formulo, ki bi to naredila???

TXT datoteka je najbolj osnovna oblika datoteke in seveda nima "implementiranega" brisanja! Če želite nekaj iz TXT datoteke pobrisati morate vse tisto kar je za tem prepisati čez.

Algoritem je nekako sledeč:

Koda: Izberi vse

Odpri TXT datoteko (VHOD)
Odpri začasno novo TXT datoteko (IZHOD)

dokler VHOD ni prazen
  če (vhodna vrstica OK) POTEM
    zapiši vrstico na IZHOD

  beri novo vrstico iz VHOD-a
ponavljaj

Odstrani datoteko VHOD
Datoteko IZHOD preimenuj v ime datoteke VHOD
Z drugimi besedami povedano: Vse podatke, ki v datoteki ostanejo, prepišete v novo datoteko (tistih, ki jih želite pobrisati pač ne prepišete) in potem to novo datoteko preimenujete v originalno.

Še povsem praktičen primer: predstavljajte si popisan list papirja.
lp,
Matjaž Prtenjak
Administrator
ROBERT
Prispevkov: 29
Pridružen: Sr Sep 14, 2005 9:55 am

Odgovor Napisal/-a ROBERT »

Ja to sem nekako razumel, vendar bi mi prišla lažja pomoč z kakšno okvirno kodo za ta postopek, če je seveda možno.

Hvala za hiter odgovor.

Lep dan še naprej...
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Težko vam napišem kaj bolj konkretnega, saj je algoritem zapisan tako da je praktično enolično definiran tudi v VBA-ju. No Lahko vam zapišem VBA kodo, ki pa jo pišem kar direktno v brkljalnik in ni preizkušena, zato so možne napake :( :

Koda: Izberi vse

  ' Odprem
 Open "vhodna.txt" for input as #1
 Open "izhodna.txt" for output as #2

  ' prepisujem
  While Not EOF(1)
    Line Input #1, VhodnaVrstica
    if (AliTaVrsticaUstreza(VhodnaVrstica) then
      print #2, VhodnaVrstica
    End If
  Wend

  'z zaprem
  Close #2
  Close #1

  ' preimenujem
  Name "izhodna.txt" as "vhodna.txt"
To je to. Napisati pa morate še funkcijo AliTaVrsticaUstreza, ki pove ali je potrebno neko vrstico prepisati ali ne. To pa je funkcija, ki jo morate napisati sami, saj samo samo vi poznate vsebino in lahko poveste katera vrstica ustreza in katera ne.
lp,
Matjaž Prtenjak
Administrator
ROBERT
Prispevkov: 29
Pridružen: Sr Sep 14, 2005 9:55 am

Odgovor Napisal/-a ROBERT »

Pozdravljen!

Nekako sem preučeval tole formulo, vendar brez uspeha.
Vse podatke iz TXT sem pač prikazal v List-boxu.
Rad bi zbrisal recimo 3 vrstico, kar pač pomeni, da v izhodni datoteki, pač te ne bi bilo.

Kako naj to naredim z pogojem?

Hvala za odgovor.

Lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Zapišite kodo, s katero ste datoteko prebrali v seznam (ListBox), jaz pa vam bom pomagal dalje...

PS: Kode ne pozabite zapreti v oznaki za kodo (gumbek 'CODE' zgoraj nad poljem za vnos teksta).
lp,
Matjaž Prtenjak
Administrator
ROBERT
Prispevkov: 29
Pridružen: Sr Sep 14, 2005 9:55 am

Odgovor Napisal/-a ROBERT »

No pa poglejva to umetnijo, formulo, za pregled txt v List-box-u je nekako takole;

Koda: Izberi vse

List1.Clear

Open "c:\vhod.txt" For Input As #1
While Not EOF (1)
Input #1, ime,priimek,cena

List1.AddItem ime & priimek & cena

Wend

close #1
No koda je taka, sedaj pa bi probal prenesti zapise, tako, da bi vila pač izbrana vrstica izbrisana, oziroma v novi datoteki pač ne bi bila zapisana.

Hvala še enkrat.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Pogoj je pač preprosto tretja vrstica. Štejete vrstice in tretjo preskočite:

Koda: Izberi vse

 ' Odprem
 Open "vhodna.txt" for input as #1
 Open "izhodna.txt" for output as #2

 dim vrstica as integer

 ' prepisujem
 While Not EOF(1)
    Line Input #1, VhodnaVrstica
    vrstica = vrstica + 1;
    if (vrstica <> 3) then
      print #2, VhodnaVrstica
    End If
 Wend

 ' zaprem
 Close #2
 Close #1

 ' preimenujem
 Name "izhodna.txt" as "vhodna.txt"
PS: V kodi se lahko nahaja kakšna sintaktična napaka, saj sem jo pisal direktno v forum in nisem preizkušal!
lp,
Matjaž Prtenjak
Administrator
ROBERT
Prispevkov: 29
Pridružen: Sr Sep 14, 2005 9:55 am

Odgovor Napisal/-a ROBERT »

Mislim, da je vse OK, razen, kaj pa če je to 4 ali 5 ali ... vrstica.
Potem je treba pač določiti ListIndex ali kja podobnega.
Pač prosim za pomoč, ker se z tem problemom ubadam kar nekaj časa?

Hvala za informacije in lep dan še naprej ...


Lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Če je to kakšna druga vrstica pa je potrebno samo v kodi zamenjati vrstico

Koda: Izberi vse

    if (vrstica <> 3) then 
z neko drugo. Za 8 vrstico bi bilo:

Koda: Izberi vse

    if (vrstica <> 8) then 
lp,
Matjaž Prtenjak
Administrator
Odgovori