PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei durchforsten und Zeichen ersetzen.


Gast
2004-07-02, 12:39:35
Hi.

Ich habe mir ein Programm geschrieben welches nach einem Zeichen in der Datei sucht und dieses durch das NUL-Zeichen ersetzt.

Die zu bearbeitende Datei wird dem Programm übergeben. Das Programmm funktioniert schonmal.

Nun hätt ich mal Fragen dazu.

1. Ist das so in Ordnung, oder mache ich was falsch? So viel habe ich mit C und Dateibearbeitung nämlich noch nicht am Hut.

2. Wenn ich das Programm über den "Ausführen"-Befehl starte, dann öffnet sich kurz das Konsolen-Fenster. Kann ich das irgendwie verhindern?

Danke. :)


#include <stdio.h>

int main(int argc, char* argv[])
{
FILE *Dat;
char ch;

int Zahl=0;

if ((Dat = fopen(argv[1],"r+b")) != NULL)
{
if (fseek(Dat,0,SEEK_SET) == 0)
{
do
{
fseek(Dat,Zahl,SEEK_SET);
ch = fgetc(Dat);
if(ch == 126)
{
fseek(Dat,Zahl,SEEK_SET);
fputc(0,Dat);
}
Zahl++;
}
while (ch != EOF);
}
fclose(Dat);
};

return 0;
}

Gast_on
2004-07-02, 16:27:23
FILE *file;
FILE *fout;
char x;

if((file = fopen("input.txt", "r")) && (fout = fopen("output.txt", "w"))){

while((x=fgetc(file))!=EOF){
if(x!=126)fputc(x, fout);
else fputc(NULL, fout);
}

fclose(fout);
fclose(file);
}
else {
printf("fail");
return -1;
}
printf("success");



probiers mal damit, müsste auch gehen und ist kürzer.

Gruß

Gnafoo
2004-07-02, 17:21:31
Bin mir nicht ganz sicher, aber müsste die Bedingung der while-Schleife nicht !feof(Dat) sein ?

cu DerTod

Gast_on
2004-07-05, 08:07:41
@Der Tod

Nein so müsste es auch gehen. Das Programm prüft, ob das gerade eingelesene Zeichen EOF ist und handelt dann dementsprechend.

Gruß

Tom Servo
2004-07-05, 23:54:12
Eine Variable sollte vom Typ int sein, wenn man auf EOF testet. Ein char ist zu klein für EOF. Es kommt zum Überlauf. Eine Unterscheidung zwischen EOF und einem normalen Zeichen welches den unteren 8bit von EOF gleicht ist dann nicht mehr möglich.

Wollte ich nur mal anmerken, weil es in beiden Quelltexten falsch gemacht wurde.

Original geschrieben von Gast


char ch;
...
while (ch != EOF);


Original geschrieben von Gast_on


char x;
...
while((x=fgetc(file))!=EOF){

Gast_on
2004-07-06, 14:02:23
Habs nicht anders gelernt und halte mich da auch an quellen aus dem Internet:
http://www.cplusplus.com/ref/cstdio/fgetc.html


Portability.
Defined in ANSI-C.

Example.


/* fgetc example: money counter */
#include <stdio.h>
int main ()
{
FILE * pFile;
char c;
int n = 0;
pFile=fopen ("myfile.txt","r");
if (pFile==NULL) perror ("Error opening file");
else
{
do {
c = fgetc (pFile);
if (c == '$') n++;
} while (c != EOF);
fclose (pFile);
printf ("File contains %d$.\n",n);
}
return 0;
}


IMO ist das streitbar und definitiv auch mit einem int vergleichbar, da gibt es auch genug quellen die das so machen. Dann ist noch die Frage nach dem Compiler etc.
Es sollte eigentlich ein char reichen, da EOF ja ^Z(Dos) oder ^D(Unix) entspricht und das ist nur ein Zeichen.

Gruß

Gast_on
2004-07-06, 14:04:26
Ach ja...
es wird ja auch ein int zurückgegeben, also wäre int vllt. die korrektere Variante :)

Gruß

Xmas
2004-07-06, 14:10:42
http://www.ratiosoft.com/lint/eof_.htm

Die vordefinierte Konstante EOF in C ist nicht das ASCII-Steuerzeichen EOF (26 bzw. 0x1A), sondern -1.