problem mit getline?
-
hi! ich lese mit einer while schleife zeilenweise eine textdatei ein...
und lasse alle zeilen die nicht mit einem bestimmten spring beginnen übertragen in eine neue text datei.
wenn alles hinter bla nun sagen wir mal über 1000 buchstaben hat dann macht das programm irgendwas falsch... es fängt an unbegrenzt zeilenumbrüche i n die targetfile weiterzuschreiben...code für den vorgang:
fstream sourcefile("meinetextdatei.txt"); fstream targetfile("ausgabedatei.txt"); char sourceline[500]; while (!sourcefile.eof()) { sourcefile.getline(sourceline, 500) if (AnsiString(sourceline).SubString(1,3) != "bla") targetfile << sourceline << endl; }hat jemand ne idee?
-
n/t
-
Dir ist doch schon klar, dass
if (AnsiString(sourceline).SubString(1,3) != "bla")
zwei Adressen vergleicht, nicht den StringInhalt?
Nimm lieber AnsiPos und teste auf 1!
-
... das problem besteht weiterhin... sobald die zeile kommt die so lang ist (die mit bla beginnt) und er die überspringt ist er in ner endlosschleife die nur noch "endl"s in die textdatei schreibt...
-
Zeig mal den aktuellen Code- Teil!
-
@DerAltenburger
Der Vergleich ist schon ok, da er ja seinen string in AnsiString umwandelt und dannn vergleicht. SubStringgibt ja einen AnsiString zurück.Ich kann mir höchstens vorstellen, dass der eingelesene string zu lang wird und er dann in eben dieser Zeile bleibt und somit eof nie erreicht.
-
fstream tempfile((source + ".temp").c_str()); fstream destinationfile((source).c_str()); while (!tempfile.eof()) { tempfile.getline(sourceline,500); // if (AnsiString(sourceline).SubString(1,20) != " JAM-INHERIT-PROPS") if (AnsiPos(" JAM-INHERIT-PROPS", AnsiString(sourceline)) != 1) { destinationfile << sourceline << endl; } }source enthällt zb "C:\meinetextdatei.txt".
-
Bei mir schneidet der den Rest der alten datei nicht ab!
Lösch mal vorher die Datei (targetfile).
PS: da stimmt mit dem stream was nicht, da kenn ich mich aber nicht aus, fstream nehm ich nie.
Der alte Inhalt muss gelöscht werden. Schau mal bei fstream nach.
(Funktionen, State, Modus)
-
Source existiert nicht... es existiert nur die .temp... was soll ich anstelle von fstream nehmen?
-
Kontrollier bitte mal ob das failbit von tempfile gesetzt ist, wenn deine Bedingung erfüllt ist. Ansonsten könntest du auch statt dem char Puffer eine Variable vom Typ std::string nehmen. Deren getline liest immer bis zum Zeilenende (egal wieviele Zeichen) und springt dann in die nächste Zeile.
Also z.Bsp
string str;
getline(tempfile, str, '\n');
-
-
das mit
getline(tempfile, str, '\n');
geht nicht...
er meckert mir:
E2285 Keine Übereinstimmung für 'getline......'O.o?
-
hast du string und iostream inkludiert ?
-
danke!! es geht nun alles *freu* :)))))))))