[c++] strings trennen

visiondpc

Erfahrenes Mitglied
moin

ich hätte mal eine ganz kurze frage. wenn ich daten aus einer csv einlesen will. wie muß ich ich in der getline () anweisung den seperator angeben, damit ich jede spalte in eine eigene variable setzen kann?

ich hatte es schon so probiert aber das ging. nicht:
Code:
while ( database.eof()==false )
        {
              getline ( database, s_id, ';', s_vorname, ';', s_name, ';', s_einsatz, ';');
              
              if ( s_einsatz==s_status )
              cout<<s_vorname<<" "<<s_name<<"\n";
        }

fehlermeldung: 101 no matching function for call to `getline(std::ifstream&, char, std::string&,

danke schonmal im vorraus.
 
Zuletzt bearbeitet:
Hi.

Du solltest erstmal die komplette Zeile in einen string einlesen. Danach kannst du die Zeile z.B. mittels eines istringstream und getline abarbeiten und zwar sukzessive, d.h. einen Wert nach dem anderen weil getline nur genau 2 Parameter akzeptiert. Oder du schreibst dir eine split Funktion (bzw. suchst hier im Forum) die dir den String z.B. in ein Array splittet.

Gruß

PS: Die Methode mit while (!xyz.eof()) Daten zu lesen ist falsch. Leider sieht man sowas immer wieder. Was wenn ein Fehler auftritt?! Richtig wäre z.B.
Code:
while (getline(database, line)) { ... }
.
 
Zuletzt bearbeitet:
danke für die schnelle antwort.

while (getline(database, line))

funktioniert bei mir leider nicht. "`line' undeclared (first use this function)"
oder soll ich line als variable deklarieren? dafür müßte ich doch allerdings die genaue anzahl kennen.

aber ich habs jetzt so gelöst.


Code:
while ( database.eof()==false )
        {
              getline ( database, s_id, ';');
              getline ( database, s_vorname, ';' );
              getline ( database, s_name, ';');
              getline ( database, s_einsatz, ';');
              
              if ( s_einsatz==s_status )
              {
                  i++;
                  s_mail[i]=s_vorname+"."+s_name+"@url.de";
              }    
        }

jetzt muß ich nurnoch rausfinden, wie ich das statt mit einer sql datei mit unserer datenbank verbinden kann.
 
visiondpc hat gesagt.:
danke für die schnelle antwort.

funktioniert bei mir leider nicht. "`line' undeclared (first use this function)"
oder soll ich line als variable deklarieren?
Richtig!
visiondpc hat gesagt.:
dafür müßte ich doch allerdings die genaue anzahl kennen.
Wieso?
Code:
string line;
while (getline(database, line)) {
  ...
}

aber ich habs jetzt so gelöst.

Code:
while ( database.eof()==false )
        {
              getline ( database, s_id, ';');
              getline ( database, s_vorname, ';' );
              getline ( database, s_name, ';');
              getline ( database, s_einsatz, ';');
              
              if ( s_einsatz==s_status )
              {
                  i++;
                  s_mail[i]=s_vorname+"."+s_name+"@url.de";
              }    
        }
Wie gesagt das mit eof zu machen ist falsch. Außerdem hast du dann in den Variablen bei jeder Zeile noch das Zeilenendezeichen mit drin.

Gruß
 
Zurück