# .txt Datei einlesen und anzeigen



## Imod (8. September 2007)

Hey,

Ich programier gerade an meinem Adressbuch,

Bis jetzt kann ich die Daten eingeben und die Werden dann alle nacheinander abgespeichert.

Aber jetzt muss ich die Datei wieder einlesen, und dann anzeigen.

Ich wollte das so machen aber er bringt einen Fehler:


```
if ( menu == 2)
  {
  fp = fopen("add.txt", "r") //lesen 
  {
  gets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    gets(cText);   //liest string bis zum zeilenende
    cout << cText;
  }  
  }
```

Der fehler ist in der Zeile " p = fopen("add.txt", "r")  "


Ich hab das Adressbuch für einen Kumpel geschrieben besser gesagt mit ihm gewettet das ich es bis heute abend schaff aber ich komm hier nicht weiter 

 wollte mir auch nicht wirklich helfen ^^

MFg Domi


thx im vorraus

P.s

Ich benutze : Dev C++
                    Windows xp
Ich hoffe das reicht braucht ihr mehr schirebt einfach


Dazu hab ich in meinem Programm diese #include :

#include <iostream.h>
#include <fstream>
#include <windows.h>
#include <shellapi.h>
#include <stdlib.h>
#include <string.h>


----------



## Acriss (8. September 2007)

Mit C++ kenn ich mich nicht so gut aus,
aber ich würde sagen, du hast ein Simikolon vergessen 

edit: sry, die { überlesen


----------



## Imod (8. September 2007)

Acriss hat gesagt.:


> Mit C++ kenn ich mich nicht so gut aus,
> aber ich würde sagen, du hast ein Simikolon vergessen
> 
> edit: sry, die { überlesen



fp = fopen("add.txt","r"); 

mit Simikolon hat er den gleichen fehler gebracht
ich hab noch das vor den code hinzugefügt:


```
FILE* fp;
```

aber hat nichts gebracht 

wäre glücklich um weitere ratschläge


----------



## Freak (8. September 2007)

jup


```
fp = fopen("add.txt", "r"); //<- Da fehlte das Semikolon
```

Noch was: Da sind 3 geschweifte Klammern auf aber nur 2 zu. Ist das nur ungünstig abgeschnitten?


----------



## Imod (8. September 2007)

char phone[20];
  char name[20];
  char name2[20];
  char myname[10];
  char cText[250];
  int web;
  int menu;


```
cout <<"\n";
  if ( menu == 2)
  {
  fp = fopen("add.txt", "r"); //lesen 
  {
  gets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    gets(cText);   //liest string bis zum zeilenende
    cout << cText;
  }  
  }
  }          
  cout <<"\n";
```


Das gehört jetzt alles noch dazu,

habs mal so gemacht wie du geschrieben hast mir dem Simikol aber hat nichts gebracht


----------



## Imod (8. September 2007)

so hab das Problem kann es nicht erklärn aber iwi kommt jetzt keine Fehlermeldung merh ^^

dafür bringt er aber trotzdem keinen text raus ^^


----------



## Imod (8. September 2007)

```
cout <<"\n";
  if ( menu == 2)
  {
  FILE* fp;
  fp = fopen("add.txt", "r"); //lesen
  { 
  gets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    gets(cText);   //liest string bis zum zeilenende
    cout << cText ;
  }
  }    
  }          
  cout <<"\n";
```

Dev c++ bringt keinen Fehler aber beim Wählen des menupunkts 2 also anzeigen des Adresbuches zeigt er nichts an obwohl  in der .txt namen drin stehn die ich davor über die console reingeschireben habe.

so sieht sie aus:

Vorname :      
Dominik
Nachname :     
Amann
Telefonnummer: 
07524/3104

Vorname :      
David
Nachname :     
Wichert
Telefonnummer: 
07524/2244

Vorname :      
Dominik
Nachname :     
Amann
Telefonnummer: 
07524/3104


----------



## Imod (8. September 2007)

hat jemand ne idee?

Mfg Domi


----------



## Imod (8. September 2007)

sorry dass ich nochmal schireb hab den code nochmal editiert mit einer else kausel.
Dec C++ bringt keinen Fehler aber durch die else kausel ahb ich erfaren das er die "add.txt" nicht öffnen kann.

Hier der neue code:


```
cout <<"\n";
  if ( menu == 2)
  {
  FILE* fp;
  if (fp = fopen("add.txt", "r")) //lesen
  { 
  gets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    gets(cText);   //liest string bis zum zeilenende
    cout << cText ;
  }
  }
  else
  {
  cout << "\n";  
  cout << "\n";  
  cout << " can not open file !! \n";
  cout << "\n";
  }      
  }
  cout << "\n";
```


----------



## Acriss (8. September 2007)

gibt es eine add.txt überhaupt?


----------



## Imod (8. September 2007)

Acriss hat gesagt.:


> gibt es eine add.txt überhaupt?




jo mit den einträgen die ich vorher geschrieben hab


----------



## MCoder (8. September 2007)

Hallo,

wenn dein Programm die Datei nicht öffnen kann, liegt es vermutlich daran, dass sie nicht gefunden wird. Versuche mal den vollständigen Pfad bei "fopen" anzugeben.
Ansonsten: Um aus einer Datei zu lesen, musst du "fgets" nehmen; "gets" liest nur von der Standardeingabe.

Gruß
MCoder


----------



## Imod (8. September 2007)

MCoder hat gesagt.:


> Hallo,
> 
> wenn dein Programm die Datei nicht öffnen kann, liegt es vermutlich daran, dass sie nicht gefunden wird. Versuche mal den vollständigen Pfad bei "fopen" anzugeben.
> Ansonsten: Um aus einer Datei zu lesen, musst du "fgets" nehmen; "gets" liest nur von der Standardeingabe.
> ...



er aht sie gefunden nur er zeigt in der console keine ausgabe an

Ich will ja das er den inhalt meiner txt einliest und dann anzeigt.

Geh ich in den menupunkt 2 also zum einlesen  kommt garnichts und das Programm hält an


----------



## Imod (8. September 2007)

so hier mal das ganze Programm :


```
// Dominik Amann
// version 0,1 Beta
// http://domi.theinviseble.de

#include <iostream>
#include <fstream>
#include <windows.h>
#include <shellapi.h>
#include <stdlib.h>
#include <string.h>

using namespace std;



int main()
{
  char handy[50];  
  char phone[50];
  char name[50];
  char name2[50];
  char myname[50];
  char cText[250];
  int web;
  int menu;
  cout <<"\n";  
  cout <<"   Adressbuch version 0.1 Beta by Domi\n";
  cout <<"\n";
  cout <<"\n";
  cout <<"  Dein Name ?\n";
  cout <<"\n";
  cin >> myname;
  cout <<"\n";
  cout <<"\n";
  cout << "   "<< myname << " moechtest du ein neuen Kontakt einfuegen (1) ?\n"; 
  cout <<"\n";
  cout << "  "<< " oder moechtest du alle Kontake anzeigen lassen (2) ? \n";
  cout <<"\n";
  cin >> menu;
  if (menu == 1)
  {
  cout << "   Gib den Vornamen des Kontaktes ein : \n";
  cout << "\n";
  cin >> name;
  cout <<"\n";
  cout << "   Gib den Nachnamen an :; \n";
  cout <<"\n";
  cin >> name2; 
  cout <<"\n";
  cout <<"\n";
  cout <<"   "<< myname << " ,gib die Telefonnummer an : \n";
  cout <<"\n";
  cin >> phone;
  cout <<"\n";
  cout <<"    Gib die Handynummer ein : \n";
  cout <<"\n";
  cin >> handy;
  cout <<"\n";
  FILE* fp; 
  fp = fopen("add.txt","a");
  fprintf(fp, "Vorname :      \n");
  fprintf(fp, name );
  fprintf(fp, "\n");
  fprintf(fp, "Nachname :     \n");
  fprintf(fp, name2);
  fprintf(fp, "\n");
  fprintf(fp, "Telefonnummer: \n");
  fprintf(fp, phone);
  fprintf(fp, "\n");
  fprintf(fp, "Handynummer :   \n");
  fprintf(fp, handy);
  fprintf(fp, "\n");
  fclose(fp); 
  } 
  cout <<"\n";
  cout <<"\n";
  if ( menu == 2)
  {
  FILE* fp;
  if (fp = fopen("add.txt", "r")) //lesen
  { 
  gets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    gets(cText);   //liest string bis zum zeilenende
    cout << cText ;
  }
  }
  else
  {
  cout << "\n";  
  cout << "\n";  
  cout << " can not open file !! \n";
  cout << "\n";
  }      
  }
  cout << "\n";  
  cout << "\n";  
  cout << "\n";            
  cout <<"\n";
  cout <<"              Moechtest du meine Website besuchen? \n";
  cout <<"\n";
  cout << "\n";  
  cout << "\n";  
  cout <<"\n";
  cout <<"    Drueck 1 fuer ja 2 fuer nein \n";
  cin  >> web;
  cout <<"\n";
  cout << "\n";  
  cout << "\n";  
  if ( web == 1)
  {
  ShellExecute(NULL, "open", "http://domi.theinviseble.de", NULL, NULL, SW_SHOW);  
  } 
  cout <<"\n";
  cout <<"\n";
  cout <<"\n";  
  system("PAUSE");	
  return 0;
}
```



Bitte editiert den code und verbessert ihn, oder schirebt einfach was ich machen soll.

Ich werd langsam verrückt   " nichts geht " ^^



thx im vorraus


----------



## MCoder (8. September 2007)

Imod hat gesagt.:


> er aht sie gefunden nur er zeigt in der console keine ausgabe an


Hattest du nicht vorher geschrieben, dass er in den else-Zweig springt und dir sagt dass er die Datei nicht öffnen kann 


Imod hat gesagt.:


> ... kommt garnichts und das Programm hält an


Hatte ich doch geschrieben: Du musst "fgets" zum Lesen nehmen.

Gruß
MCoder


----------



## Imod (8. September 2007)

MCoder hat gesagt.:


> Hattest du nicht vorher geschrieben, dass er in den else-Zweig springt und dir sagt dass er die Datei nicht öffnen kann
> 
> Hatte ich doch geschrieben: Du musst "fgets" zum Lesen nehmen.
> 
> ...



jo aber das hat sich behoben da hab cih ausversehn ein buchstabe mehr eingetipt.

Also muss ich aus dem "gets" "fgets" machen?

thx für die antwort


----------



## Imod (8. September 2007)

```
{
  FILE* fp;
  if (fp = fopen("add.txt", "r")) //lesen
  { 
  fgets(cText);   //liest string bis zum zeilenende
  cout << cText;
  while(!(feof(fp)))   // bis datei zu ende ist
  {
    fgets(cText);   //liest string bis zum zeilenende
    cout << cText ;
  }
  }
```

hab jetzt das gets durch fgets geändert, geht  aber immer noch nicht,
den jetzt kommen wieder fehlermeldungen


----------



## Acriss (8. September 2007)

Lss dir doch nicht alles aus der nase ziehen -.-
Was für Fehlermeldungen? oO


----------



## Imod (8. September 2007)

Acriss hat gesagt.:


> Lss dir doch nicht alles aus der nase ziehen -.-
> Was für Fehlermeldungen? oO



also:

236 C:\Dev-Cpp\include\stdio.h too few arguments to function `char*  fgets(char*, int, 
236 C:\Dev-Cpp\include\stdio.h too few arguments to function `char*  fgets(char*, int, FILE*)' 
86 C:\Documents and Settings\D©MI\Desktop\adressbuch\fertig\adressbuch.cpp at this point in file


----------



## MCoder (8. September 2007)

Liebe Leute, schaut's euch doch bei Problemen mal die Beschreibung zu den Bibliotheksfunktionen an. Außerdem sollte man sich doch denken können, dass der bei "fopen" erhaltene Zeiger noch für irgendwas gut sein könnte  

Die Funktion "fgets" benötigt mehr als einen Parameter (was übrigens auch schon der Compiler in seiner Fehlermeldung angemerkt hatte):

```
fgets(cText , sizeof(cText), fp);  // char * fgets ( char * str, int num, FILE * stream );
```
Gruß
MCoder


----------



## Imod (8. September 2007)

MCoder hat gesagt.:


> Liebe Leute, schaut's euch doch bei Problemen mal die Beschreibung zu den Bibliotheksfunktionen an. Außerdem sollte man sich doch denken können, dass der bei "fopen" erhaltene Zeiger noch für irgendwas gut sein könnte
> 
> Die Funktion "fgets" benötigt mehr als einen Parameter (was übrigens auch schon der Compiler in seiner Fehlermeldung angemerkt hatte):
> 
> ...



Vielen vielen Dank "" 

Jetzt geht es mal mit einer Zeile 

sorry aber ich lern aus einem Buch und bin noch lange ncht so weit wie mein Programm mit output und input.

Nochmal Danke

bb


----------



## MCoder (8. September 2007)

Imod hat gesagt.:


> sorry aber ich lern aus einem Buch und bin noch lange ncht so weit wie mein Programm mit output und input.


Kein Problem 
Folgender Link ist für dich vielleicht ganz hilfreich, weil da eine gute Referenz zur C und C++ Standardbibliothek enthalten ist, wo man schnell sowas nachschlagen kann: http://www.cplusplus.com/reference/

Gruß
MCoder


----------



## Imod (9. September 2007)

MCoder hat gesagt.:


> Kein Problem
> Folgender Link ist für dich vielleicht ganz hilfreich, weil da eine gute Referenz zur C und C++ Standardbibliothek enthalten ist, wo man schnell sowas nachschlagen kann: http://www.cplusplus.com/reference/
> 
> Gruß
> MCoder




thx werd ich dann immer schaun 

jojo schöner tag noch und nomal Danke

Falss dus nochmal liest wie mach cih das er whithespace also Absatzt und leerzeichen einliest 


Mfg Domi


----------



## MCoder (9. September 2007)

Imod hat gesagt.:


> Falss dus nochmal liest wie mach cih das er whithespace also Absatzt und leerzeichen einliest



Hallo Domi,

"fgets" liest immer bis zum Zeilenende. Lererzeichen und Whitespaces wie etwa Tabs und das erreichte Newline werden dabei mit eingelesen. Willst du kompletten Inhalt der Datei "am Stück", also in einer Variablen haben, musst die einzelnen Zeilen entsprechend verknüpfen.

```
#include <string>

// ...

std::string strFile; // Variable für Dateiinhalt

while( !feof(fp) )
{
    fgets(cText, sizeof(cText), fp);

    strFile += cText; // aktuell gelesene Zeile speichern
}
```
Gruß
MCoder


----------

