# 2 Werte pro Zeile aus einer dat datei auslesen



## egon84 (2. Juni 2005)

hallo ich brauche mal ein wenig hilfe ,
also ich habe die aufgabe aus einer dat datei pro zeile 2 werte auszulesen und zu verarbeiten.
ich bin jetz schon soweit das ich die datein einlese und pro zeile ausgeben lasse auf dem Bildschirm.
Ich weiss nur nicht wie ich die daten die ich ausgebe speichern kann.

hier der code :


```
#include <stdio.h>
	#include <conio.h>
	void main()
	{ char c;
	 char puffer[1024];
	 char* pp; // Pointer auf den Puffer
	 char  filename[80] = "c:\\temp\\dat.txt";
	 FILE *fp;
	
	 fp = fopen(filename,"r"); // versuche Datei zu öffnen
	 pp= puffer; // pp auf Anfang des Puffers
	
	    if (fp==NULL)
	       { printf("Fehler: Datei %s nicht geöffnet ",filename);    }
	      else { do      // Datei erfolgreich geöffnet – nun ist Lesen möglich
	           { c=fgetc(fp);     //Lesen nächstes Zeichen
	             *pp = c; pp++;
	     
	            }
	         while (c!=EOF) ;   //Prüfen auf End Of File
	     pp--;  *pp=0;  // Setzen des Endezeichens 0 für den Text
	     printf("Das ist der Inhalt der Datei: \n%s",puffer);
	   }
	   if  ( ! fclose(fp))   // ungleich 0 -> Erfolg
	           printf("Datei erfolgreich geschlossen");
	   getch();
	}
```

Die dat datei sieht folgendermaßen aus:

1222    15555
1222    45864
2222    45555


usw


Wäre echt nett wenn mir jemand einen tip geben würde.


----------



## Tobias K. (2. Juni 2005)

moin


fscanf


mfg
umbrasaxum


----------



## Tobias K. (2. Juni 2005)

moin


Beispiel:

```
char zahl1[10], zahl2[10];

FILE *datei = fopen("test.txt", "r");

fscanf(datei, "%s %s", zahl1, zahl2);
```


mfg
umbrasaxum


----------



## egon84 (2. Juni 2005)

besten dank das hat mich echt weiter gebracht.
Nochmals bestens dank


----------



## Tobias K. (2. Juni 2005)

moin


Eigentlich in dem du das nochmal aufrufst.


mfg
umbrasaxum


----------



## egon84 (2. Juni 2005)

habs ebend auch rausgefunden 

also wenn ich jetz 18 zahlen in der datei habe brauche ich 18 variablen 

danke


----------



## Tobias K. (2. Juni 2005)

moin


Nö, ich würde an deiner Stelle ein Array von Typ "string" benutzen.


mfg
umbrasaxum


----------



## egon84 (2. Juni 2005)

hm ich hab jetz das mitm array versucht aber irgendwie bekomm ich das nicht gebacken mit den 18 variablen geht es.

Könntest du mir nen kleines beispiel geben?


----------



## Tobias K. (2. Juni 2005)

moin



```
string Zahlen[100];

FILE *datei = fopen("test.txt", "r");

for(int i=0; i<100; i+=2)
    fscanf(datei, "%s %s", Zahl[i], Zahl[i+1]);
```


mfg
umbrasaxum


----------



## NEonIC (16. Juni 2005)

HIHI!


```
string Zahlen[100];
string Zahlen[100];

FILE *datei = fopen("test.txt", "r");

for(int i=0; i<100; i+=2)
    fscanf(datei, "%s %s", Zahl[i], Zahl[i+1]);
```

Jetzt nochmal ne Frage von mir:
In welcher Bibliothek finde ich den Datentypen String Mit einem Char auf 10 Zeichen begrenzt, funktioniert es so nicht!
Wie kann man so das Problem lösen?

Greetz
NEonIC


----------



## Tobias K. (16. Juni 2005)

moin


Also erstmal darfst du string Zahlen[100]; nicht zweimal machen!
Dann, für string musst du die string.h oder string ohne .h includieren.


mfg
umbrasaxum


----------



## NEonIC (16. Juni 2005)

Findet man die string.h auch in C?
Habs ebend ausprobiert...erst nachdem ich die iostream eingefügt hatte, funzte es...aber leider immernoch die frage, ob es auch so in c geht und nicht nur in c++.

hier mal mein code:

```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <iostream.h>

int main()
{
  FILE *datei;
  int err,i,n;
  string tiere[29];
  double wertx[9],werty[9];

  i=0;
  datei = fopen ("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\Aufgabe_4\\tiere.dat", "r");
  if (datei==NULL){printf("Datei existiert nicht\n");}
  else{
    do{
      err = fscanf(datei,"%s %lf %lf",tiere[i],&wertx[i],&werty[i]);
      printf("%s %lf %lf\n",tiere[i],wertx[i],werty[i]);
      i++;
    }
    while(err !=EOF && i < 10);
  }
  //printf("%s %lf\n",tiere,wertx[8]);
  system("PAUSE");
  fclose(datei);
  return 0;
}
```

NEonIC


----------



## Tobias K. (16. Juni 2005)

moin


Welchen Compiler hast du?


mfg
umbrasaxum


----------



## NEonIC (16. Juni 2005)

Anner Uni arbeite ich mit gcc. hier jetzt bei mir mit dev c++ (und der soll ja auch gcc ursprungs sein)..

Hab mich geirrt...geht bei mir auch ohne die iosteam nicht.
Irgendwas stimmt aber an meinem Code nicht...und der Fehler liegt definitiv beim string bzw. char.
Hier nochmal die eigentliche Version:

```
#include <stdio.h>
#include <stdlib.h>


int main()
{
  FILE *datei;
  int err,i,n;
  char tiere[29];
  double wertx[9],werty[9];

  i=0;
  datei = fopen ("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\Aufgabe_4\\tiere.dat", "r");
  if (datei==NULL){printf("Datei existiert nicht\n");}
  else{
    do{
      err = fscanf(datei,"%s %lf %lf",tiere[i],&wertx[i],&werty[i]);
      printf("%s %lf %lf\n",tiere[i],wertx[i],werty[i]);
      i++;
    }
    while(err !=EOF && i < 10);
  }
  //printf("%s %lf\n",tiere,wertx[8]);
  system("PAUSE");
  fclose(datei);
  return 0;
}
```

Die Textdatei (tiere.dat) sieht so aus:

Werwolf 0.2500000 -0.0100000
Tom 1.0000000 -0.0100000
Itchy 0.0800000 -0.0020000
Oger 1.5000000 -0.0500000
Charming_Bear 0.5000000 -0.0400000
Kaetzchen_vom_Baum -1.0000000 0.0100000
Jerry -2.0000000 0.0100000
Scratchy -0.2000000 0.0004000
Einhorn -0.5000000 0.4000000
Muffinman -0.5000000 0.0250000

Thx schonmal für Antwort! Hoffe, dass ich mein Pensum an Fragen für heute nicht aufgebraucht habe...;P

Greetz NEonIC


----------



## NEonIC (16. Juni 2005)

Habs selbst gelöst! Ich danke für deine Hilfe. Man musste nur nen bissl mit struct arbeiten:

```
#include <stdio.h>
#include <stdlib.h>

struct eintrag{
  char tiere[39];
};

struct eintrag array[10];


int main()
{    
  FILE *datei;
  int err,i,n;
  
  double wertx[9],werty[9];

  i=0;
  datei = fopen ("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\Aufgabe_4\\tiere.dat", "r");
  if (datei==NULL){printf("Datei existiert nicht\n");}
  else{
    do{
      err = fscanf(datei,"%s %lf %lf",array[i].tiere,&wertx[i],&werty[i]);
      printf("%s %lf %lf\n",array[i].tiere,wertx[i],werty[i]);
      i++;
    }
    while(err !=EOF && i < 10);
  }
  system("PAUSE");
  fclose(datei);
  return 0;
}
```

Greetz NEonIC


----------



## deepthroat (17. Juni 2005)

Hi,

du solltest im Übrigen aber nicht versuchen die Datei zu schliessen, wenn diese gar nicht geöffnet werden konnte (führt zu einem Speicherzugriffsfehler).

Im Klartext, der fclose()-Aufruf muss noch mit in den else-Zweig deiner Bedingung.


----------

