Zeile für Zeile aus Textdatei auslesen
-
Julian__ schrieb:
#include <vector> #include <string> #include <fstream> #include <iostream> using namespace std; // ... vector< string > zeilen; ifstream fin; fin.open( "DATEINAME", ios_base::in ); if( !fin ) cout << "Datei konnte nicht geoeffnet werden!" << endl; else { while( !fin.eof() ) { char cZeile[ 256 ]; fin.getline( czeile, 256 ); string sZeile( cZeile ); zeilen.push_back( sZeile ); } } / ***Wieso immer der Umweg über char-arrays?

#include <vector> #include <string> #include <fstream> #include <iostream> std::vector<std::string> zeilen; std::ifstream fin("DATEINAME", std::ios::in); if(!fin) { std::cout << "Datei konnte nicht geoeffnet werden!" << std::endl; } else { std::string zeile; while(!fin.eof()) { std::getline(fin, zeile); zeilen.push_back(zeile); } }(Ebenfalls ungetestet
)
-
stimmt, da ist ja noch die globale std::getline-funktion ...
danke fuer die korrektur!mfg,
julian
-
Danke für die schnelle Antwort, nur leider hab ich jetzt ein neues Problem da mein Compiler 4 Warnungen und einen Fehler angibt.
warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,int>' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,int>' : identifier was truncated to '255' characters in the debug information
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >:: vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information
c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::
~vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug informationerror C2065: 'Lese_Liste' : undeclared identifier
Mein Quelltext
vector<string> zeilen; ifstream OeffneWordlist(DateiName, ios::in); if (OeffneWordlist != NULL) { string zeile; while(!OeffneWordlist.eof()) { getline(OeffneWordlist, zeile); zeilen.push_back(zeile); } }Hab leider keine Ahnung was ich falsch gemacht hab, wäre schön wenn mir dadrauf auch jemand eine Antwort geben könnte
-
An dem Stück sieht soweit ich es sehe alles richtig aus, vielleicht postest du noch etwas mehr code?
-
Die komplette Funktion:
#include <iostream> #include <windows.h> #include <conio.h> #include <fstream> #include <string> #include <vector> #include "Funktionen.h" using namespace std; int UeberpruefeWordlist() { system ("cls"); cout << "Bitte geben Sie den Dateinamen der Wordlist an: "; char DateiName[1024]; char PufferC; int PufferI; for (int Eingabe = 0; Eingabe < 1024; Eingabe++) { PufferC = _getch(); PufferI = static_cast<int> (PufferC); if (PufferI == 28) { DateiName[Eingabe] = '\0'; Eingabe = 1024; } else { cout << PufferC; DateiName[Eingabe] = PufferC; } } vector<string> zeilen; ifstream OeffneWordlist(DateiName, ios::in); if (OeffneWordlist != NULL) { string zeile; while(!OeffneWordlist.eof()) { getline(OeffneWordlist, zeile); zeilen.push_back(zeile); } } else MessageBox(NULL, "Wordlist nicht vohanden, bitte geben Sie einen anderen Namen an", "Fehler", MB_OK | MB_ICONERROR); return 0; }
-
ich hab es mal eben probiert und dieses testprogramm funktioniert bei mir problemlos:
#include <iostream> #include <windows.h> // #include <conio.h> /* brauch ich nicht :) */ #include <fstream> #include <string> #include <vector> // #include "Funktionen.h" /* hab ich nicht :) */ using namespace std; vector< string > UeberpruefeWordlist() { string dateiname; system ("cls"); cout << "Bitte geben Sie den Dateinamen der Wordlist an: "; cin >> dateiname; cout << endl; vector<string> zeilen; ifstream OeffneWordlist(dateiname.c_str(), ios::in); if (OeffneWordlist != NULL) { string zeile; while(!OeffneWordlist.eof()) { getline(OeffneWordlist, zeile); zeilen.push_back(zeile); } } else MessageBox(NULL, "Wordlist nicht vohanden, bitte geben Sie einen anderen Namen an", "Fehler", MB_OK | MB_ICONERROR); return zeilen; } int main() { vector< string > zeilen = UeberpruefeWordlist(); bool leer = true; for( int i = 0; i < zeilen.size(); i++ ) if( zeilen.at( i ) != "" ) // => mindestens in einer zeile steht etwas, also keine komplett leere datei -> ergebnisse ausgeben und schleife beenden { leer = false; for( int j = 0; j < zeilen.size(); j++ ) { cout << "zeile " << j + 1; // nur fuer die einrueckung der ausgabe if( j >= 99 ) cout << "\t"; else if( j >= 9 ) cout << "\t\t"; else cout << "\t\t\t"; cout << zeilen.at( j ) << endl; } break; } if( leer ) cout << "keine eintraege vorhanden!" << endl; return 0; }zugegeben, wirklich schoen ist das nicht, aber es funktioniert gut.
mfg,
julian
-
Vielen Dank,
jetz funktioniert es endlich *fg* ich bekomme zwar noch 5 Warnungen, aber das Programm lässt sich endlich ohne Fehlermeldung compilieren
vg KKaiser
-
Wenn das alles C4786-Warnungen wie oben sind, kannst du die gefahrlos ignorieren (die sagen lediglich aus, daß die angegebenen Namen zu lang sind für deinen Debugger).
-
es gibt bei den for-schleifen ein paar warnungen, weil man signed- und unsigned-int vergleicht.
sollte hier aber keine probleme geben.mfg,
julian
-
Ok Danke