Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

Das mit fread hört sich ja nicht schlecht an.

Wo geb ich da den Dateinamen an?

Kannst mir vieleicht ein Beispiel machen???

Gruß

und Danke

TripleD


#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!!! ;)

geht auch mit fstream.

dann kann man aus den dateien lesen und schreiben, wie wenn man normale aus- bzw. eingaben macht mit << oder >>.

kennst du vielleicht von cin und cout.

du musst dann eben fstream.h einbinden.

mfg korea1

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

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

wenn ich mich richtig erinnere, interpretiert fgetc ein leerzeichen als CR ...

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.

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

Hmm, kann mir jemand die Bitmuster für signed und unsigned Zahlen liefern, damit ich auf Bitebene einen Unterschied sehen kann?

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

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.

Ich würde es IMHO in diesem Zusammenhang nicht als Paritätsbit bezeichnen. Aber sonst stimmt das. Paritätsbit wurde zur begrenzten Übertragungsverifikation eines Bytes verwendet.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.