Zum Inhalt springen

Daten aus Datei lesen


TripleD

Empfohlene Beiträge

Hallo zusammen,

hoffe mir kann jemand bei meim

Problem helfen.

Ich habs geschaft eine Text-Datei zu speichern,

mit den Daten, die ich in einem Array gespeichert habe.

Jetzt möchte ich aus dieser Text-Datei

den Text auslesen, bekomme das

ganze aber irgendwie nicht hin.

Hoffe es kann mir jemand helfen.

Gruß TripleD

PS: Benutze WinXP Prof. und VC++ 6.0

Das ganze ist ne Konsolenanwendung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

viele wege führen nach rom

"fread" wäre eine möglichkeit:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

Beschreibung

Liest Daten aus einem Stream.

fread liest n Datenelemente, die jeweils die Größe size Bytes haben, aus dem angegebenen Stream in den Speicherbereich, auf den ptr zeigt.

Es werden insgesamt (n * size) Bytes gelesen.

/*****************************************************/

fgets:

#include <stdio.h>

char *fgets(char *s, int n, FILE *stream);

Beschreibung

Liest einen String aus einem Stream.

fgets liest einen String aus stream in den durch s angegebenen String und

bricht ab, wenn entweder ein Zeilenvorschub (\n) gelesen wird oder n-1 Zeichen gelesen wurden. Der Zeilenvorschub wird am Ende von s gespeichert. Anschließend hängt fgets automatisch ein Nullzeichen (\0) an, um das Ende des Strings zu markieren.

/*****************************************************/

fgetc:

#include <stdio.h>

int fgetc(FILE *stream);

Beschreibung

Liest ein Zeichen aus einem Stream.

fgetc liest das jeweils nächste Zeichen aus dem Eingabe-Stream stream.

Link zu diesem Kommentar
Auf anderen Seiten teilen


#include <string.h>

#include <stdio.h>


int main(void)

{

   FILE *stream;

   char msg[] = "this is a test";

   char buf[20];


   if ((stream = fopen("DUMMY.FIL", "w+"))

       == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return 1;

   }


   /* Schreiben von Daten in die Datei */

   fwrite(msg, strlen(msg)+1, 1, stream);


   /* Setzt den Dateizeiger auf den Anfang der Datei */

   fseek(stream, SEEK_SET, 0);


   /* Liest die Daten und zeigt sie an */


   fread(buf, strlen(msg)+1, 1, stream);

   printf("%s\n", buf);


   fclose(stream);

   return 0;

}

funktioniert meines wissens aber nur bei indexsequentiellen dateien (alle zeilen gleich lang...)

PS - kann man alles nachlesen unter der Dokumentation deines Compilers!!! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

um nicht gleich ein neues aber ähnliches Thema zu eröffnen, schreibe hier gleich an diesen Beitrag ran.

fgets,fgetc und fread sind gute Funktionen, nur habe ich bei fgetc ein Problem und weiß nicht, wie ich es direkt lösen soll:

Wenn ich zeichenweise aus einer Datei rauslese, funktioniert das alles sehr gut, aber ein Problem ist z.B. das Auslesen einer Binärdatei. Nach x beliebigen Zeichen erreicht fgetc ohne es wirklich erreicht zu haben das EOF. Warum?

Klar ich könnte es mit fread umgehen, aber mich interessiert dieser fgetc-Fehler, insofern es nicht an mir liegt.

Achso als Anmerkung:

Das entspr. Programm wurde in Zortech C++ Demo Compiler geschrieben, falls das alles Compiler abhängig sein sollte.

Gruß Tapeman

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

poste doch mal den Code der Schleife, in der Du die Datei ausliest. Verwendest Du ein Konstrukt der Art:

while (!(c=fgetc(FILE))) {

/* tue irgendwas */

}; ?

In diesem Fall terminiert die Schleife mit dem ersten Auftreten einen Null-Chars (EOF wird in der Regel durch -1 repräsentiert, daher sollte "c" auch ein signed int sein).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ungefähr:

unsigned int c;

FILE *fp;

fp=fopen(..,..);

if (fp!=NULL)

{

c=fgetc(fp);

while(c!=-1)

{

printf("%c",c);

c=fgetc(fp);

};

};

also sprich in etwas was Du gesagt hast.

Bei Dateien wird das EOF als FFFF dargestellt.

Nun dachte ich wenn ich c als unsigned int mache, sehen die Werte so aus:

gelesener Char \0, 8, -1 (EOF)

c in binär 00000000 00000000, 00000000 00001000, 11111111 11111111

Und somit hätten 0 0 sein müssen und A 65 und EOF -1 sprich FFFF.

Ich muß es mal mit VC++6.0 ausprobieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

So ungefähr:

unsigned int c;

also sprich in etwas was Du gesagt hast.

Bei Dateien wird das EOF als FFFF dargestellt.

Du solltest auf alle Fälle mit einem signed int arbeiten, da ansonsten die Rückgabewerte für EOF nicht korrekt behandelt werden können. Der Wert "FFFF" deutet darauf hin, das EOF (-1) als unsigned interpretiert wird. Du vergleichst einen unsigned int mit dem Wert "-1".

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

soweit ich das noch richtig im kopf hab ist der unterschied von signed und unsigned am paritätsbit zu erkennen.

paritätsbit auf 1 -> signed

paritätsbit auf 0 -> unsigned

damit bleiben nur noch 7 bits übrig um werte darzustellen, da das 8. bit das paritätsbit ist.

korrigiert mich, falls ich gerade quark erzählt habe :D

mfg korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, ich glaube mit dem Paritätsbit bist auf dem richtigen Weg.

Datentyp:

signed: Paritätsbit=0 --> negativ

signed: Paritätsbit=1 --> positiv

unsigned: egal ob 0 oder 1

signed:

0000 0000 -> -128

0111 1111 -> -001

1000 0000 -> +/-0

1000 0001 -> +001

1111 1111 -> +127

unsigned:

0000 0000 -> 0

0111 1111 -> 127

1000 0000 -> 128

1111 1111 -> 255

signed=unsigned-128

So meine Schlußfolgerung.

Wenn ich ein praktisches Ergebnis habe melde ich mich wieder.

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...