Zum Inhalt springen

Ansi C Datei I/O


Eleu

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...