Eleu Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Hallo, der folgende Ansi C Code ließt aus der Datei "C:\Text.txt" die erste Zeile aus. Ausgegeben werden die ersten 3 Zeichen und eine Zeile tiefer im Ausgabefenster die nächsten 3 Zeichen. { { char data_1[255]; char aa[255]; char bb[255]; FILE *ptr; ptr = fopen("C:\\Text.txt", "r"); //Textdatei öffnen if (ptr !=NULL) // Ist der File vorhanden ? Wenn nicht Fehlermeldung { fgets(data_1, 255, ptr); //Die Zeile wird aus der Textdatei wird eingelesen strcpy(aa, data_1); strcpy(bb, data_1); { char* substr = &aa[0]; aa[3] = '\0'; printf( "Wert 1 aus Zeile 1: '%s'\n", substr , "%s\n"); } { char* substr = &bb[3]; bb[6] = '\0'; printf( "Wert 2 aus Zeile 1: '%s'\n", substr , "%s\n"); } if( ptr != NULL ) // Wenn nichts in der Textatei steht, springe nach unten und schliesse die Datei { } fclose( ptr ); //Textdatei schliessen } else printf ("Error: File not found!\n"); } } Ich hätte mal die Frage, wie ich denn an die letzen 3 Zeichen in der Textdatei herankommen kann, wenn diese nicht in der ersten Zeile der Textdatei stehen, sondern in der zweiten Zeile der Textdatei ? Gruß Eleu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Ich hätte mal die Frage, wie ich denn an die letzen 3 Zeichen in der Textdatei herankommen kann, wenn diese nicht in der ersten Zeile der Textdatei stehen, sondern in der zweiten Zeile der Textdatei ?Lies zeilenweise aus der Datei, bis du das Ende der Datei erreichst, dann ermittle die letzten 3 Zeichen der zuletzt eingelesenen Zeile. Beachte, dass die letzte Zeile möglicherweise kürzer als 3 Zeichen ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 26. Januar 2012 Autor Teilen Geschrieben 26. Januar 2012 Hallo, danke für den Tipp. Habe jetzt einfach noch mal die Funktion fgets geschrieben. Also so: fgets(data_2, 255, ptr); Funktioniert auch soweit. bis du das Ende der Datei erreichst, dann ermittle die letzten 3 Zeichen der zuletzt eingelesenen Zeile. Beachte, dass die letzte Zeile möglicherweise kürzer als 3 Zeichen ist. Wieso ? Wenn in der Datei nichts mehr drin steht, wird halt nichts ausgegeben ? Gruß Eleu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Funktioniert auch soweit.Ja, bis deine Datei mal irgendwann drei Zeilen hat. Es wäre möglicherweise besser, gleich das allgemeine Problem zu lösen. Wenn in der Datei nichts mehr drin steht, wird halt nichts ausgegeben ?Deine Berechnung, wo die letzten drei Zeichen einer Zeile anfangen, können dich vor den Anfang der Zeile bringen, wenn die Zeile weniger als drei Zeichen enthält. Und das erzeugt undefiniertes Verhalten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 26. Januar 2012 Autor Teilen Geschrieben 26. Januar 2012 Wie geht denn das ? Hast Du ein Beispiel, oder einen Link für mich ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Kann man nicht, um die letzten drei Zeichen zu Ermitteln mit fseek den Lesezeiger auf 3 Zeichen vor SEEK_END setzen und einfach von da aus bis zu m Ende ausgeben lassen? (oder habe ich die Anforderung gerade falsch interpretiert und es geht um die letzten drei Zeichen einer jeden Zeile?) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 26. Januar 2012 Autor Teilen Geschrieben 26. Januar 2012 Also die Anforderung ist einfach aus einer x-beliebige Textdatei an bestimmten festgelegten Stellen Daten auszulesen und weiter zu verarbeiten. Die Daten müssen in der Textdatei immer an der gleichen Stelle stehen, sonst ist es unmöglich. Zum Beispiel als Schnittstelle zwischen zwei Systemen. Eine Datei zum lesen und eine Datei zum schreiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Wie geht denn das ?Hab ich doch geschrieben. Kann man nicht, um die letzten drei Zeichen zu Ermitteln mit fseek den Lesezeiger auf 3 Zeichen vor SEEK_END setzen und einfach von da aus bis zu m Ende ausgeben lassen?fseek ist unter Windows unzuverlässig, wenn die Datei im Textmodus geöffnet wurde. Ansonsten würde das funktionieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 Also die Anforderung ist einfach aus einer x-beliebige Textdatei an bestimmten festgelegten Stellen Daten auszulesen und weiter zu verarbeiten. Die Daten müssen in der Textdatei immer an der gleichen Stelle stehen, sonst ist es unmöglich.In deinem ersten Beitrag hast du von den letzten 3 Zeichen der Datei geschrieben. Das ist nur dann immer die gleiche Stelle, wenn die Datei immer gleich lang ist. Ist das der Fall? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 26. Januar 2012 Autor Teilen Geschrieben 26. Januar 2012 Ja das ist der Fall... Es würde mich trotzdem interessieren, wie das geht ? Etwa mit fscanf die Zeichenanzahl bis zum Ende der Datei über den Rückgabewert ermitteln ? Und dann immer rückwärts (subtrahieren) um an die Stellen zu kommen ? Oder wie meinst Du das ? Und wenn ja, wie muss ich das Programmieren ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 26. Januar 2012 Teilen Geschrieben 26. Januar 2012 fseek - C++ Reference Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.