LLpresident Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 ich habe volgendes problem. ich will wenn ich fehler gefunden hab(siehe quelltext) das dann die gesamte zeile in der der fehler aufgetauht ist in eine seperate textdatei geschrieben wird. problem ist blos das die fehlermeldung erst etwas weiter in der zeile steht. wie kann ich zum zeilenanfang zurück kehren um auch das was vor der fehlermeldung steht zu kopieren? char Zeichen; char Fehler_code[] = "\t1\t"; char Zeile[4]; char Tabulator = '\t'; char EndOfLine = '\n'; int Tab = 0; int i; memset( Zeile, 0, 4 ); ifstream application("application.txt", ios::in); while(!application.eof()) { application.get(Zeichen); Zeile[0] = Zeile[1]; Zeile[1] = Zeile[2]; Zeile[2] = Zeichen; if(Zeichen == Tabulator) { Tab++; } if(Zeichen == EndOfLine) { Tab = 0; } if((strcmp(Zeile,Fehler_code) == 0) && (Tab == 3)) { Fehler_komplet++; //zum zeilenanfang; ofstream String("Fehlerliste.txt", ios::app); String << Zeichen; } edtFehler_gesamt->Text = Fehler_komplet; } thx im vorraus. Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 Du könntest z.B. die Zeichen in jeder Zeile bis zum Fehler zählen und dann mit fseek den Zeiger zurücksetztsen. Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 hab mir fseek mal angekuckt. blick da aber nicht wirklich zu 100% durch. kanst du mir ein quelltextbeispiel geben? Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 sorry, aber ich hab gerade mal nachgeschaut und fseek nur als Funktion gefunden die als Dateizeiger eine FILE Struktur erwartet. Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 mit lseek akzeptiert der compiler das ifstream. brauch trotzdem noch sowas wien quelltext-beispiel. Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 Also soweit ich das sehe akzeptiert lseek nur ein "normales" Dateihandle das mit _open() geöffnet wurde. Ein Bsp aus der MSDN wäre: #include <io.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> void main( void ) { int fh; long pos; /* Position of file pointer */ char buffer[10]; fh = _open( "lseek.c", _O_RDONLY ); /* Seek the beginning of the file: */ pos = _lseek( fh, 0L, SEEK_SET ); if( pos == -1L ) perror( "_lseek to beginning failed" ); else printf( "Position for beginning of file seek = %ld\n", pos ); /* Move file pointer a little */ _read( fh, buffer, 10 ); /* Find current position: */ pos = _lseek( fh, 0L, SEEK_CUR ); if( pos == -1L ) perror( "_lseek to current position failed" ); else printf( "Position for current position seek = %ld\n", pos ); /* Set the end of the file: */ pos = _lseek( fh, 0L, SEEK_END ); if( pos == -1L ) perror( "_lseek to end failed" ); else printf( "Position for end of file seek = %ld\n", pos ); _close( fh ); } [/PHP] Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 gibt mir jetzt keine fehlermeldung wegen dem application aber das es keine übereinstimmung gibt: lseek(application, 0L, SEEK_SET); mh.sagt mir genause wenig wie die borlandsche hilfe. Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 Also... der erste Parameter ist dein Dateihandle der zweite ist die Anzahl der Stellen um die der Dateipointer verschoben werden soll und der dritte sagt aus ob der zweite vom Anfang(SEEK_SET), von der aktuellen Position(SEEK_CUR) oder vom Ende(SEEK_EDN) zählen soll. Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 hab ich auch grade rausgefunden. kommt aber immernoch mit der fehlermeldung "keine übereinstimmung gefunden". wieso ist in der hilfe der/das handel als intwariable deklariert? int main(void) { int handle; char msg[] = "This is a test"; char ch; /* Erzeugen einer Datei */ handle = open("TEST.$$$", O_CREAT | O_RDWR, S_IREAD | S_IWRITE); /* Schreiben von Daten in die Datei */ write(handle, msg, strlen(msg)); /* Dateizeiger auf den Anfang der Datei stellen */ lseek(handle, 0L, SEEK_SET); /* Liest solange Zeichen aus der Datei, bis wir EOF betätigen */ do { read(handle, &ch, 1); printf("%c", ch); } while (!eof(handle)); close(handle); return 0; } Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 wieso ist in der hilfe der/das handel als intwariable deklariert? Weil open() ein int anscheinend als Dateihandle ausreicht. Ist das da oben dein Programm das den Fehler produziert oder arbeitest du noch mit ifstream? Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 ich arbeite noch mit ifstream. das was ich zum schluss gepostet hab ist das beispiel aus der hilfe. Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2002 Geschrieben 17. Dezember 2002 ich arbeite noch mit ifstream. das was ich zum schluss gepostet hab ist das beispiel aus der hilfe. Dann liegt der Fehler daran das lseek kein ifstream objekt akzeptiert, du mußt mal schauen ob ifstream eine ähnliche Methode hat. Zitieren
LLpresident Geschrieben 17. Dezember 2002 Autor Geschrieben 17. Dezember 2002 hat jetz funktionirt. jemand aus der firma hat mir grade geholfen. statt dem lseek ist es jetzt so geregelt worden: ifstream::pos_type pos= application.tellg(); application.seekg(pos-9); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.