[c++] Problem beilesen aus String

guddy

Mitglied
Hallo.

Ich habee folgendes Problem. Ich möchte aus folgender Textdatei 4 Werte in Variablen unterschiedlichen Types schreiben:

Name: ran
Ort: greb
Nummer: 5
Anzahl: 22

Die Werte nach Name und Ort sollen vom Typ Char- und Nummer sowie Anzahl sollen vom Typ int sein.
Bei folgendem Code bekomme ich nur die Ausgabe "=":

C++:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main() {
  std::string input = "Name: ran\nOrt: greb\nNummer: 5\nAnzahl: 22\n";
  std::string var, val, f;

//std::istringstream in(input);
std::ifstream in("test.txt");     // neuen Lese-Stream erzeugen
  
  for(int i = 0; i < 4; ++i) {
    std::getline(in, var, ':'); // Einlesen bis :
    in.ignore(); // Leerzeichen ignorieren
    std::getline(in, val); // Einlesen bis Zeilenende
    std::cout << var << " = " << val << "\n";
    
  }
  std::cin >> f;
}

Mit dem auskommentierten String funktionierts, aber leider nicht mit dem ifstream. test.txt ist geschlossen.

Grüße

Guddy

Viele Grüße

Guddy
 
Je nachdem mit welchem Texteditor du die Datei geschrieben hast, bestehen Zeilenumbrüche darin nicht aus "\n" sondern aus "\r\n".
Ich kann dir auch nicht sagen warum, aber ich hatte an ähnlicher Stelle ähnliche Probleme mit std::getline.

Meine Lösung: Keine Zeilenumbrüche, sondern andere Trennzeichen verwenden

Name: ran|Ort: greb|Nummer: 5|Anzahl: 22

Code:
std::string temp, var, val;
while(std::getline(in,temp,'|'))
{
var = temp.substr(0,temp.find(':'));
val = temp.substr(temp.find(':')+1, temp.lenght() - 1 - var.length());
}
 
Zuletzt bearbeitet:
der hier funktioniert:

Code:
std::ifstream inFile;
inFile.open( FileName, ios::in );
inFile.seekg(0);
while( !inFile.eof() )
{
    Lesen ...
ach ja, in 'FileName' muss natürlich ein gültiger Wert stehen, z. B. "C:\\test.txt"
 
Zuletzt bearbeitet:
funktioniert unter Linux. Der Pfad war auch unter Windows korrekt. Keine Ahnung was da schief liegt.

Mit welchem Befehl kann ich die int Werte parsen?
Ich suche außerdem noch eine Möglichkeit wie ich an das erste Zeilenende einer Datei springen kann und dann ab da weiterschreiben kann. Ich möchte quasi in die entsprechende Zeile einen Stream einfügen.

Grüße

Guddy
 
ich hab jetzt mal probiert die Werte nach int zu casten. bekomme aber einen segmentation fault. hat jemand eine idee?


C++:
#include <iostream>

#include <fstream>

#include <sstream>

#include <string>



int main() {
std::string input = "Name: ran\nOrt: greb\nNummer: 5\nAnzahl: 22\n";

std::string dummy, var, val[3], f;

int value[3];

//std::istringstream in(input);

std::ifstream in("Variableninput.dat");     // neuen Lese-Stream erzeugen
for(int i = 0; i < 4; ++i) {

    std::getline(in, var, ':'); // Einlesen bis :

    in.ignore(); // Leerzeichen ignorieren

    std::getline(in, val[i]); // Einlesen bis Zeilenende
    std::istringstream invar( val[i] );
	
    invar >> value[i];	

    std::cout << var << " = " << val[i] << "\n";

    

  }

	

}
 
:D Junge bisse dreist :D Der Code ist nichtmal von dir geschrieben ... 0xdeadbeef von fun-soft.de hat den geschrieben :D

Der Ausgangscode war korrekt, nur der Ort deiner Datei nicht.
 
Jup, hab ja auch nie gesagt, dass der code von mir ist. Kann ja sein, dass hier jemand ne Lösung weiß. Es funktioniert ja jetzt....
 

Neue Beiträge

Zurück