Ich habe in anderen Beispielen gesucht, aber ich kann dieses eine Arbeit nicht machen. Ich habe eine Datei, die irgendwann seltsame Zeichen hat zum Beispiel: "Äèîpg" Ich möchte diese Zeile nicht speichern, weil es scheint, dass die Schleife mit getline dort aufhören wird (es speichert bis die Zeile mit dem Papierkorb). Wie könnte ich das bitte machen? Ich weiß, wenn dies passiert: "key = 0", die nächste Zeile hat diese Zeichen "Äèîpg".Wie überspringe ich die nächste Zeile, wenn Bedingung C++
Hier ist mein Code:
file = "example.log";
ifstream f(file);
f.open(file);
if (f.good()){
while (getline(f, line)) {
lineNumber++;
if ((lineNumber>= line1 - 20) && (lineNumber<= line2)){
pos = line.find("key = 0");
if (pos != string::npos){
std::cout << "skip the line" << endl;
}
else{
Type v;
v.line= line;
v.index = lineNumber;
linesVector.push_back(v);
}
}
}
}
f.close();
Dann erstelle ich einen Schnitt Datei mit der Info, die ich brauche:
ofstream myfile;
string merge = file + "_Cut.log";
myfile.open(merge);
for (unsigned int i = 0; i < linesVector.size(); i++){
myfile << linesVector[i].line << "\n";
//std::cout << linesVector[i].line << endl;
}
myfile.close();
Danke im Voraus für Ihre Hilfe!
Um zu verdeutlichen, wie meine Datei aussieht, hier ist das Original "example.log" (ich kann es nicht irgendwo anhängen).
2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2pE&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ
2017-08-03 09:38:46 81B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk=
2017-08-03 09:38:47 B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk=
2017-08-03 09:38:48 bla
2017-08-03 09:38:49 OK
2017-08-03 09:50:12 key = 0
2017-08-03 09:50:12 E&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ
und hier ist das, was ich in der geschnittenen Datei erhalten:
2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2p
Das Problem ist, dass es in der letzten giberrish stecken und sich nicht bewegen kann! Könnte es sein, dass ein Wagenrücklauf fehlt? Mir gehen die Ideen aus.
wert, einige Zeit mit den Debugger investieren genau herauszufinden, was mit „Äèîpg“ goofy ging . es könnte eine Mehrfachzeichencodierung sein und jedes dieser Zeichen könnte ein Ende der Dateimarkierung oder etwas enthalten, das den Strom aus dem einen oder anderen Grund in einen Fehlerzustand versetzt. – user4581301
Hallo, es ist defacto, dass dies in meiner TXT-Datei passiert. Mein Versuch ist es, jede Zeile zu überspringen, die in der vorherigen Zeile mit der "key = 0" vorangestellt ist. – user6812514
'if (lineNumber> = line1 - 20 && lineNumber <= 2)' ist viel einfacher zu lesen. Die zusätzlichen Klammern sind ablenkend. Es braucht Zeit, um herauszufinden, dass sie nichts bedeuten. –