Forum » Programiranje » 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).
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
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.

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...
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);
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;
}
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 presledkov
Malo počakaj, ko mislim, da sem dobil eno ql idejo.
Bom naredil bol low level.

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 &...

#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?
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;
...
}
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] težava z binarnimi datotekamiOddelek: Programiranje | 1384 (1218) | darkkk |
» | [C] Branje iz datotekeOddelek: Programiranje | 1753 (1584) | BigWhale |
» | Branje datoteke [C]Oddelek: Programiranje | 1140 (1069) | Glodko |
» | c++ datotekeOddelek: Programiranje | 4083 (3572) | Vesoljc |
» | srand in program v Cju???Oddelek: Programiranje | 1614 (1484) | nuclear |