Zeile aus Datei nach tabs trennen

Ozzy Ozborn

Erfahrenes Mitglied
Hi,

ich möchte in C++ aus einer .txt Datei die Zeilen nacheinander lesen. Es stehen jeweils 3 Zahlen in der Zeilen:
Zahl1 [tab] Zahl2 [tab] Zahl3
Nun suche ich eine Möglichkeit, diese 3 Zahlen herauszufiltern.
Ich hatte so etwas schon einmal mit Leerzeichen gemacht:
Code:
char line[100];
int a, b, c;
ifstream file("datei.txt");
getline(file, line);
sscanf(line," %d %d %d ", &a, &b, &c);
Doch wie macht man das mit tabs? Oder geht es vielleicht noch eleganter?

Vielen Dank schon einmal für Eure Hilfe
MfG, Ozzy
 
Hi.

Also im Grunde brauchst du an deinem Code nichts verändern, da ein Leerzeichen im scanf Formatstring für eine beliebige Anzahl von Leerraumzeichen (Leerzeichen, Tabs, Newline) steht.

Ich würde es trotzdem in C++ anders machen. Zuerst würde ich einen String verwenden statt eines begrenzten Zeichenarrays bzw. würde zumindest die Grenze beim Einlesen angeben. Dann würde ich die Zeile mit einem istringstream weiterverarbeiten:
C++:
#include <sstream>
#include <string>

using namespace std;
...
string line;
while (getline(file, line)) {
  istringstream istr(line);
  int a, b, c;

  if (istr >> a >> b >> c) {
    // a, b, c verwenden.
  } else {
    // Fehler: in der Zeile standen keine 3 Integer.
 }
}
Gruß
 
Hi,

danke für Deine schnelle Antwort; doch leider geht er bei mir gar nicht in die While-Schleife rein. Kannst Du sehen, wo mein Fehler ist?

Code:
	ifstream file("datei.txt");
	string line;
	
	while (getline(file, line)) {
		istringstream istr(line);
		int delay, type, size;
		
		if (istr >> delay >> type >> size) {
			cout << "delay: " << delay << endl;
			cout << "type: " << type << endl;
			cout << "size: " << size << endl;
		} else cout << "Dateifehler" << endl;
		wait();
	}

MfG, Ozzy
 
Sorry, Fehlararm Die Datei lag im Ordner, wo meine cpp-Dateien liegen; aber wenn ich compiliere, wird die ausführbare Datei woanders erzeugt, um die Source-Ordner "nicht zu verschmutzen". Und dementsprechend lag die .txt - Datei falsch!

Jetzt funktioniert auf jeden Fall alles, noch einmal vielen Dank für Deine Hilfe

MfG, Ozzy
 
Sorry, Fehlararm Die Datei lag im Ordner, wo meine cpp-Dateien liegen; aber wenn ich compiliere, wird die ausführbare Datei woanders erzeugt, um die Source-Ordner "nicht zu verschmutzen". Und dementsprechend lag die .txt - Datei falsch!
Ja, das kann recht schnell passieren. Evtl. solltest du noch prüfen, ob die Datei überhaupt geöffnet werden konnte (z.B. wenn die NTFS Rechte ein Lesen der Datei verhindern - oder die Datei einfach nicht existiert...)
C++:
ifstream file("test.txt");

if (!file.is_open()) {
  cerr << "Fehler: konnte Datei nicht öffnen." << endl;
  return 1;
}
Gruß
 

Neue Beiträge

Zurück