Verfügbare Informationen zu "Datei einlesen"
Qualität des Beitrags: Beteiligte Poster: Blümchen - DrPhil_Guth - exbs - Dirty Oerty Forum: Tutorials.at Forenbeschreibung: Programmierforum aus dem Unterforum: C / C++ Antworten: 9 Forum gestartet am: Mittwoch 19.04.2006 Sprache: deutsch Link zum Originaltopic: Datei einlesen Letzte Antwort: vor 17 Jahren, 2 Monaten, 11 Tagen, 18 Stunden, 54 Minuten
Alle Beiträge und Antworten zu "Datei einlesen"
Re: Datei einlesen
Blümchen - 07.02.2007, 12:26Datei einlesen
Hallo,
ich habe ein Problem...denn ich möchte eine beliebig große Datei einlesen können. Am Anfang steht eine Zeichenkette, wobei er mir immer nur den ersten Buchstaben anzeigt...warum?
Das zweite Problem ist, dass ich die Datei verlängern kann und mir werden trotzdem nur 3 Zeilen ausgegeben.
Hab leider das Problem noch nicht gefunden.
Code: # include <stdio.h>
# include <math.h>
# include <string.h>
main () {
int i, m, n ;
double lage1[m], lage2[m];
char ziel[m];
FILE *datei_ptr;
datei_ptr = fopen("test.txt","r");
if ( datei_ptr != NULL ) {
for ( i=0; i<m; i++ )
fscanf(datei_ptr,"%s %lf %lf",&ziel[i],&lage1[i],&lage2[i]);
fclose(datei_ptr);
printf("%i Punkte wurden gelesen\n",m);
for ( i=0; i<m; i++ )
printf("%c\t%.3f\t%.3f gelesen\n",ziel[i], lage1[i],lage2[i]);
}
else {
printf("Datei konnte nicht geoeffnet werden!\n");
}
}
ich hoffe, mir kann jemand helfen.
LG
Re: Datei einlesen
DrPhil_Guth - 07.02.2007, 15:54
also ich seh 2 dinge:
1. Du musst nicht dein Ganzes programm unter
if ( datei_ptr != NULL ) {
}
unterbringen, du kannst auch einfach nur das programm beenden lassen, wenn das passiert. ungefähr so:
Zitat: if ( (datei_ptr = fopen("test.txt","r") == NULL)
{
printf ("Datei konnte nicht geöffnet werden.);
return 0;
}
/* Programmcode
return 0;
Das zweite könnte das sein:
Code: int i, m, n ;
...
for ( i=0; i<m; i++ )
ehm, wo genau wurde m initialisiert? welchen wert sollte das haben? ;)
Und sonst poste mal die test.txt datei, vl. gibts ja von dort was interessantes.
Re: Datei einlesen
exbs - 07.02.2007, 16:52
Zitat: wobei er mir immer nur den ersten Buchstaben anzeigt...warum? -> Code: printf("%c\t%.3f\t%.3f gelesen\n",ziel[i], lage1[i],lage2[i]); net "%c" sonder "%s" ... is das erste was mir jetzt auffällt.
hab mal schnell was geschrieben: (besonders gut kommentiert isses net Code: )#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
unsigned int CharCountFile(FILE *txt)
{
unsigned int numChars;
fseek(txt, 0, SEEK_END);
numChars = ftell(txt);
fseek(txt, 0, SEEK_SET);
return numChars;
}
int main()
{
FILE *txt = fopen("test.txt", "r");
if (txt == NULL) //Abbruch wenn Fehler beim öffnen der Datei
{
fprintf(stderr, "Error. Cannot open file.");
return 1;
}
int x;
char *temp = NULL;
temp = (char*)malloc(sizeof(char) * CharCountFile(txt)); //Vorrübergehenden Speicher anlegen, für file -> string
while(!feof(txt))
{
fscanf(txt, "%c", &temp[x]);
x++;
}
temp[CharCountFile(txt)] = '\0'; //leztes Byte nullterminieren
unsigned int i = 0, newline = CharCountFile(txt) - strlen(temp);
free(temp); //Speicher wieder freigeben
char tmp[MAX];
float wert1[newline], wert2[newline];
char target[newline][MAX];
while (!feof(txt))
{
fgets(tmp, MAX, txt);
sscanf(tmp, "%s %f %f", &target[i], &wert1[i], &wert2[i]);
fprintf(stdout, "%s %.3f %.3f\n", target[i], wert1[i], wert2[i]);
i++;
}
fclose(txt);
} Es wird "dynamisch" genug speicher für die textdatei gestellt. es ist manchmal ziemlich umständlich aba optimieren kannst du ja selber ;).
hier mal meine verwendete textdatei: test.txt hat folgendes geschrieben: hallo 2565.55 558.25
buuub 655 59596 ich hoffe, so hast du das auch gemeint.
Re: Datei einlesen
Blümchen - 07.02.2007, 20:27
ja also mittlerweile habe ich es so:
Code: # include <stdio.h>
# include <math.h>
# include <string.h>
main () {
int i, m=5, n ;
struct satz{
double lage1[m], lage2[m];
char ziel[m];
};
struct satz s[m];
FILE *datei_ptr;
datei_ptr = fopen("test.txt","r");
if ( datei_ptr != NULL ) {
for ( i=0; i<m; i++ )
fscanf(datei_ptr,"%s %lf %lf",&s[i].ziel[i],&s[i].lage1[i],&s[i].lage2[i]);
fclose(datei_ptr);
printf("%i Punkte wurden gelesen\n",m);
for ( i=0; i<m; i++ )
printf("%c\t%.3f\t%.3f gelesen\n",s[i].ziel[i], s[i].lage1[i],s[i].lage2[i]);
}
else {
printf("Datei konnte nicht geoeffnet werden!\n");
}
}
und die Textdatei sieht so aus:
haus 50 90
ecke 34 21
baum 56 76
ähm ja, also wenn ich hier anstatt %c = %s
Code: printf("%c\t%.3f\t%.3f gelesen\n",s[i].ziel[i], s[i].lage1[i],s[i].lage2[i]); mache,
dann macht er nur noch Kaudawelsch!
Ich dachte, man könnte eine beliebige Datei einlesen, also ohne das man angeben muss, wie groß dann m ist...aber vielleicht hab ich das noch nicht so ganz verstanden.
@ exbs ... der Code sieht wirklich kompliziert aus...ich steig da leider garnicht so wirklich durch...ich glaub auch, dass ich die meisten Funktionen noch nicht hatte...kommen mir jedenfalls nicht sonderlich bekannt vor :cry:
mmmh...was machen wir da?
Re: Datei einlesen
Blümchen - 07.02.2007, 20:36
achso @DrPhil_Guth
aber wenn ich jetzt das ganze Programm auch unter
Code: if ( datei_ptr != NULL ) {
}
unterbringen, das ginge auch,oder? Also ich meine, das ist doch kein direkter Fehler oder?
LG
Re: Datei einlesen
Dirty Oerty - 07.02.2007, 21:19
es ist nur nicht so übersichtlich, wenn du es da rein quetschst.
hab noch nicht das prob gefunden...
Re: Datei einlesen
exbs - 08.02.2007, 00:58
Zitat: @ exbs ... der Code sieht wirklich kompliziert aus...ich steig da leider garnicht so wirklich durch...ich glaub auch, dass ich die meisten Funktionen noch nicht hatte...kommen mir jedenfalls nicht sonderlich bekannt vor net glei verzagen ;) ... so wie du geschrieben hast möchtest du eine beliebige menge an zeilen einlesen ... ja das is nur leider net so ohne weiteres möglich, denn du musst ja während das prog die datei analysiert die größe ermitteln um dann ohne speicher zu verschwenden gunug bereitzustellen.
edit:
Zitat: Ich dachte, man könnte eine beliebige Datei einlesen, also ohne das man angeben muss, wie groß dann m ist...aber vielleicht hab ich das noch nicht so ganz verstanden. ja kla du kannst jede textdatei einlesen, NUR muss sie 1. deinem format gerecht werden und 2. muss genug speicher vorhanden sein.
einfach ein "m" zu nehmen ohne vorher einen wert bestimmt zu habn ist net das ware. du musst einer variable vor der benutzung einen wert geben oder während der benutzung ... aba nie geht net.
ich gug mir jetzt dein neues bsp mal genauer an ;) ..
Re: Datei einlesen
DrPhil_Guth - 08.02.2007, 16:40
Blümchen hat folgendes geschrieben:
aber wenn ich jetzt das ganze Programm auch unter
Code: if ( datei_ptr != NULL ) {
}
unterbringen, das ginge auch,oder? Also ich meine, das ist doch kein direkter Fehler oder?
LG
Nö, Fehler isses keiner. Nur anders gehts auch, und da hast du ne klammer weniger...
Re: Datei einlesen
Blümchen - 12.02.2007, 11:38
Danke für euere Hilfe...hat mir schon geholfen :wink:
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum Tutorials.at
Variablen tauschen - gepostet von Joe am Samstag 03.11.2007
Windowsoberfläche bei C++ Programmierung - gepostet von kismoh am Dienstag 13.02.2007
MP3 TAGS ? - gepostet von exbs am Donnerstag 04.01.2007
Blitz3D-Welten - gepostet von Dragorad am Dienstag 14.11.2006
c-Programme mit psp - gepostet von Elch am Donnerstag 13.09.2007
GUI mit BASIC - gepostet von BASIC am Mittwoch 09.08.2006
Befehl zum löschen einer Datei - gepostet von Bratwurst am Dienstag 14.08.2007
Ähnliche Beiträge wie "Datei einlesen"
Frida The Lion Queen. - PFQ (Mittwoch 20.10.2010)
Datei respektiv link Upload - nico (Sonntag 06.03.2005)
Was ist diese Datei "optimize" ??? - FlorianSchröder (Donnerstag 29.04.2004)
Neuer Virus kommt durch BMP-Datei - RaymannStyleZ (Donnerstag 13.05.2004)
AVI-Datei umwandeln in V-CD bzw. S-VCD - Dutch (Dienstag 01.02.2005)
Save-Datei - zwerg20-07 (Sonntag 05.08.2007)
GOTHIQUINE (NARREN7) - Tory (Dienstag 25.01.2011)
ISO Datei erstellen - Joggl (Montag 23.07.2007)
Befehl zum löschen einer Datei - Bratwurst (Dienstag 14.08.2007)
Datei-Upload - cr1sch4 (Freitag 09.12.2005)