Textdatei in String

2fast4you87

Erfahrenes Mitglied
Moin,
habe nen kleines Problem.
Ich kann mit diesem Code die txt datei einlesen aber bei einem leerzeichen bricht er ab und ich habe nur den halben string.
Wie kann ich die komplette datei einlesen ohne das er bei einem Leerzeichen abricht ?
Code:
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])
 {
  ifstream in("test.txt", ios::in | ios::binary);

    
    if (!in.is_open()) return 1;
	string str;

	in  >>str;

                  cout <<str;
 

    return 0;
}
 
Zuletzt bearbeitet:
Hy!

Das geht mit der Methode getline, dort musst du allerdings noch immer Zeile für Zeile einlesen. Oder du änderst dein Programm folgendermaßen:
Code:
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])
 {
  ifstream in("test.txt", ios::in | ios::binary);

    
  if (!in.is_open()) return 1;

  string str, fullstring;
  
  while( in >> str)
    fullstring += str;
  
  cout <<str;
  return 0;
}
 
Hi ,
habe das jetzt mal gemacht aber stehe jetzt vor einem Problem.
Ich möchte einen Teilstring auslesen und in einen anderen String kopieren, dafür benutze ich die fkt. substr() nur wenn ich sie in der while schleife laufen lasse dann compeliert alles ganz wunderbar nur beim ausführen geht die cmd box auf; dann kommt ein fenster wo drinne steht Debug Fehler .Ich habe schon ausprobiert indem ich das a in dem Array wegnehme und dort eine 0 rein schreibe. Das Funktioniert auch aber ich muss das ja in einem Array haben.

zur Info ich benutze VC++ v.6


Code:
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])
{

ifstream in("abdata/Lohn0103.001AR", ios::in | ios::binary);
  ofstream outfile("foo.txt");
  
  string line[999]; 	
  string datensatz[999]; 
  int a=0;

  while(!in.eof()){ // cih weiß das ist schlecht aber auf die schnelle mache ich es so.

  getline(in,line[a]);
  datensatz[a]+=line[a].substr(2,5); // beim compelieren 0 fehler beim Ausführen fehler

  }

cout << datensatz[0]<<"\n\n\n"<<endl;
	outfile.close();
    return 0;

}
 
Hi,
ist vielleicht jetzt nicht die Lösung für dein Problem an sich, aber müsstest du in der while Schleife nicht auch a hochzählen? Jetzt schreibt der ja alles in das Feld 0. Denke mal das willst du nicht (wozu sonst 999 Felder). Du solltest vielleicht auich überlegen das ganze dynamischer zu gestalten, oder sind deine Dateien immer 999 Zeilen lang?

Gruß
 
oh sry ...

das habe ich vergessen mit zukopieren. da steht natürlich ein
Code:
a++;

Danke wegen dem Typ mit der Dynamik, werde ich einbauen.
 
Hy!

Poste mal einen Teil aus deinem File, damit man das ganze testen kann.

Aber ein Vorschlag: verwende doch mal einen std::vector wenn du schon c++ programmierst.

mfg
uhu01
 
20030140006 0000VO 030000400002003010100000022882+00000022882+40000 00000000000000000000000Liese 00000000000000000000 0000000000000000 00000000000000000000000000 0000000 0000000000 0000000000 0000000
20030140007 0000VO 030000500002003010100016938793+00016938793+40000 00000000000000000000000Liese 00000000000000000000 0000000000000000 00000000000000000000000000 0000000 0000000000 0000000000 0000000



kannst du mal nen Code Beispiel schicken
 
2fast4you87 hat gesagt.:
Code:
  while(!in.eof()){ // cih weiß das ist schlecht aber auf die schnelle mache ich es so.

  getline(in,line[a]);
  datensatz[a]+=line[a].substr(2,5); // beim compelieren 0 fehler beim Ausführen fehler
  }
Was heißt hier auf die Schnelle? :rolleyes:
Code:
while (getline (in, line[a])) {
  if (line[a].length () >= 7) 
    datensatz[a] += line[a].substr (2, 5); 
  ++a;
}

Du weißt das es schlecht ist, machst es aber trotzdem. :mad: Du prüfst nicht ob mit geline überhaupt etwas eingelesen werden konnte, trotzdem versuchst du einen substr (2, 5) von einem Leerstring (falls nichts eingelesen werden konnte bleibt der string an der momentanen Position im Array unverändert) zu bilden. Und das passiert immer nach der letzten Zeile, da ist in.eof () nämlich noch nicht true, trotzdem kann nichts mehr eingelesen werden.
 
Zurück