Zeichen in einer Datei löschen
-
Hallo,
ich suche eine Möglichkeit, ein einzelned Zeichen aus einer Datei zu löschen.
Vielleicht stellt ich mich je auch zu dumm an, aber ich habe sämtliche Möglichleiten ausgetestet.
-
das ist leider nicht moeglich. du musst die datei neuschreiben (also auslesen, aendern, wieder in die datei schreiben)
-
/*
nicht so schnell aufgeben.angenommen 'Q' ist zu loeschen, die paar zeilen machen es.
etwa kompliziert wirds wenn es darum geht "strings" oder der x.ten 'Q'
zu loeschen, sicher aber loesbar.
eroeffne ein paar files mit einige eintraege (groesse ist unwichtig), ein
'Q' darf, muss aber nicht vorhanden sein, compiliere, schau was passiert.aufruf: exec-name filename1 filenameN
*/#include <stdio.h>
#define TOKILL 'Q'main(int argc, char **argv)
{
extern char *basename(char *);
FILE *inp, *out;
char *myname, ccc;for(argc = 0, myname = *argv++; *argv; ++argv){
inp = fopen(*argv,"r"); out = fopen(*argv,"r+");
while((ccc = fgetc(inp)) != TOKILL && ccc != EOF) fputc(ccc,out);
fputc(1+EOF,out); fclose(inp); fclose(out);
++argc;
}
if(argc) exit(0);
exit(printf("USAGE: %s filename1 ... filenameN\n",myname));
}
-
@jsarbach Das ist genau die Antwort von Shade Of Mine in einer absolut unleserlichen Art und Weise codiert und ohne die äußerst nüzlichen Tags zu nutzen.
Wenn man es dich durchliest könnte man eigentlich auf die Idee kommen das das erste Kommandozeilenargument das zu löschende Zeichen sein sollte, und das danach erst die Files kommen.
- Wofür "extern char *basename(char *); "?
- Warum gehst du mit exit und nicht mit return raus, exit ist brutaler Abbruch?
- Man sollte ein Programm mit return verlassen = falls alles ok ein Wert !=0 wenn ein fehler auftritt
- Was bringt bitte der Returnwert von printf in exit?
- Ob das die geniale Idee ist dasselbe File zweimal zu öffen einmal zum lesen und einmal zum schreiben?
- Warum prüfst du argc am Ende des Programms und nicht am Anfang?P.S. Kommentare im Code ist das was man weglassen kann oder?