» »

Kako bi izbrisal vrstico v neki datoteki

Kako bi izbrisal vrstico v neki datoteki

pro549 ::

Lep pozdrav,
rad bi hotel v neki datoteki izbrisati vrstico, če ta nima izpopolnjene določenih pogojev
Primer:
Recimo da ima datoteka nekje vmes to vsebino:
...
Industrial Society *Remix*|yoshi.shacknet.nu|Yoshi is the cutest ever!|58|||||
Ytek's Stuff|ytek.no-ip.org:2|-= MOVIES.TV.XBOX =-.px. |0|||||
YtseJamDC|ytsejamdc.no-ip.com|Bootleg Trading Network.px.|7|||||
YtseJamDC|ytsejamdc.no-ip.com:411|Bootleg Trading Network.px.|8|||||
...
In zdaj program naj izbriše tiste vrstice, kjer na koncu ne preseže cifre 50 ("|50|||||"). V tem primeru se izbrišejo 2., 3. in 4. vrstica, 1. vrstica ima 58, tako naj se ne bi izbrisala.

A mi lahko kdo prosim napiše samo tisti del programa, kjer program odpre datoteko in začne gledati celo vrstico in jo izbriše, če ne izpolnjuje pogoj?

Aja proram naj bi bil v C-ju (linux C, če je sploh kaka razlika).

Seadoo ::

No no... lenobe pa ne bomo podpirali >:D

Odpreš z fopen(), brisanje vrstic pa izvedeš tako, da file zbrišeš in zapišeš vanj le tiste vrstice, katere hočeš. Vrstico dobiš z funkcijo fgets(), pol jo moreš pa malo sparsat in ugotovit če je taprava.

BigWhale ::

To lahko naredis z eno blesavo shell skripto... In fact, to lahko naredis v eni sami vrstici v bashu... Pa se prav dolga ne bi bila...

Kiddiez...

Zgodovina sprememb…

  • spremenil: BigWhale ()

pro549 ::

saj ni to, da sem len ampak ne znam sem že iskal tiste ebook-e pa nisem nič našel. Saj bi že sam naredil, če bi znal. Kako pa se naredi to v bashu? Aja in še nekaj kako v tistih zadnih znakov poberem vn cifro (|58||| --> 58)? Če bi vsaj zapisano v obliki |0058|||, |0008|||, itd. bi bilo lažje.

Vesoljc ::

uporabiš sscanf funkcijo
vrstica = "tekst||23123"
sscanf(vrstica, "%s||%d", buffer, vrednost);
Abnormal behavior of abnormal brain makes me normal...

pro549 ::

Vesoljc: sem poskusi to tvojo foro ampak mi ne uspeva z " sscanf(vrstica, "%s||%d", buffer, vrednost); ", lahko poskusiš ti na windows mašini, ker jst delam to pod linuxom in nevem, če je to problem.
Drugače na moj poskusni program ki mi ni uspel

#include < stdio.h> ** sem moral
#include < stdlib.h>

int main(void)
{
int a;
char tekst[80],tekst2[80];
tekst = "123 dafa aiohfa |4|||||";
sscanf(tekst,"%s|%d|||||", tekst2, a);
printf("%s %d",tekst2,a);
return 0;
}

Person ::

Hm, msilim, da %s ne podpira presledkov0:)
Malo počakaj, ko mislim, da sem dobil eno ql idejo.

Bom naredil bol low level.
Let's make something useful!

Zgodovina sprememb…

  • spremenil: Person ()

Vesoljc ::

linux,win nima veze, to je vse pure c ;)

#include < string.h>
#include < stdio.h>
#include < stdlib.h>

int main()
{
char tekst[80];
char t1[80];
char t2[80];
int a,b,c;
strcpy(tekst,"123 tester ||65||232|asc\0");
sscanf(tekst,"%d %s ||%d||%d|%s",&a,t1,&b,&c,t2);
printf("%s\n%s\n%d\n%d\n%d\n",t1,t2,a,b,c);
}

kot kaže je zadevca občutljiva na presledke, tko da mejčken pazi...
ko pa bereš s sscanf-om, mu moraš podajat pointerje oz. adrese spremenljivk.
pri char tekst[80] je to kar tekst sam, pri številih int pa &...
Abnormal behavior of abnormal brain makes me normal...

pro549 ::

Sem že naredil program z uporabo ukaza fgets in inf stavki. Samo ena stvar me moti. V literaturi sem našel en tak simpl primer:

while(1) {
...
fgets(besedilo, datoteka)
if (besedilo==NULL) break;
...
}

Stvar dela samo problem je, ko pridemo do konc datoteke in ukaz fgets(besedilo, datoteka) sploh ne da besedilu vrednost NULL, tako da to mi kroži v neskončnost in v besedilu ostane vrednost zadnje vrstice. A zna kdo kaj več o tem in kako se rešim tega problema?

DMouse ::

char *fgets(char *line, int maxline, FILE *fp)
fgets reads the next input line (including the newline) from file fp into the character array line; at most maxline-1 characters will be read. The resulting line is terminated with '\0'. Normally fgets returns line; on end of file or error it returns NULL. (Our getline returns the line length, which is a more useful value; zero means end of file.)


Naredi tako:
while(1) {
...
if (fgets(besedilo, datoteka) == NULL) break;
...
}


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] težava z binarnimi datotekami

Oddelek: Programiranje
91257 (1091) darkkk
»

[C] Branje iz datoteke

Oddelek: Programiranje
101651 (1482) BigWhale
»

Branje datoteke [C]

Oddelek: Programiranje
81031 (960) Glodko
»

c++ datoteke

Oddelek: Programiranje
463837 (3326) Vesoljc
»

srand in program v Cju???

Oddelek: Programiranje
131522 (1392) nuclear

Več podobnih tem