File Compare funktioniert nicht ...
-
Hallo leute,
habe eine Funktion geschrieben womit ich den Inhalt zweier Datei Zeile für Zeile miteinander vergleichen (Die Formatierung der Dateien sind Identisch nur der Inhalt nicht). Später sollen nur Zeilen verglichen werden die mit einen bestimmten Keyword beginnen....Dazu aber später mehr

Das resultat wird dann in ein extra File gespeichertScreen sollte so sein...
Inhalt:
FileA.txt
Wort1
Wort2
Wort3FileB.txt
Wort1
Wort2Resultat.txt
FileA hatWort3
zu viel.
Ich habe mich shcon mit einer Funktion beschäftigt und habe auch ganz viel gebastelt nur Es speichert mir Irgendwie alles ab und vergleicht nicht so richtig...
//Vergleiche FileA.txt -> FileB.txt { ifstream ifs1(directory1); ifstream ifs2(directory2); ofstream ofs("Resultat_Vergleich.txt"); //Header Datei ofs <<"Alle Signalnamen die File A hat"<<std::endl<<std::endl; string line1; string line2; while (!ifs2.eof()){ getline(ifs2,line2); while (!ifs1.eof()) { getline(ifs1,line1); if (line1!=line2) { ofs << line1; ofs << "\n"; } else { } } } }Vielleicht habe ich nur ein logischen Fehler und ich sehe es nicht...
Vielen Dank im voraus!!!!!!!!
-
undercover schrieb:
...
Ohne jetzt inhaltlich das ganze zu überfliegen:
a) Verwende bitte die [ cpp ], nicht die [ code ]-Tags (ohne Leerzeichen)
b) Rück besser ein
c) Vermeide tiefe Schachtelungen, und lager dann lieber Teilcode in weitere Funktionen ausGrundsätzlich habe ich aber ohnehin an deinen Ansatz zweifel. Was möchtest du eigentlich wirklich vergleichen? Was ist z.B. wenn die Zeilen nicht einheitlich angeordnet sind (in deinem Fall sind dann alle nachfolgenden Zeilen mit hoher Wahrscheinlichkeit "falsch"). Soll wirklich rein über die Position in der Datei verglichen werden (Es sieht bei deinem Beispiel danach aus, das die Position nicht wichtig wäre)?
cu André
-
Sorry, ich wusstee das nicht werde mich beim nächsten Beitrag danach halten!
Die Position der Wörter spieelt keeine Rolle. Was halt nur wichtig ist zu wissen
ob das Wort überhaupt im anderen File vorkommt, falls nicht soll es das fehlende Wort speichern!zu den leerzeichen und so nochmals sorry, habe bisschen extreme programmeing ausgeübt

-
Ich würde zuerst alles mal einlesen und dann Schritt für Schritt vergleichen. Wenn eines fehlt, musst du ja darauf achten, dass die nächsten alle mit grosser Wahrscheinlichkeit auch falsch sind, respektive um eines verschoben. Das sollte aber recht einfach zu bewerkstelligen sein. (Oder du machst gleich ein insert an der Stelle).
Ob das ganze sinnvoll ist bezweifle ich mal, aber wenn es dir hilft etwas zu lernen.

btw:
zu den leerzeichen und so nochmals sorry, habe bisschen extreme programmeing ausgeübt
Das hast du nicht..
http://de.wikipedia.org/wiki/Extreme_Programming
-
Springt denn getline() an den Anfang des files, wenn eof() erreicht ist?
Denn das erwartest du ja, wenn du über alle Zeilen in ifs2 iterierst um es dann mit allen Zeilen des ifs1 zu vergleichen...Da wohl Dateioperationen aufwändiger sind als das iterieren durch eine Liste, solltest du zumindest ifs1 gleich komplett in eine std::list<string> oder eben gleich ne QStringList speichern.
-
Warum sollte er dafür QT installieren?!
Sowas reicht doch auch:
typdef std::vecto<std::string> StringList;
-
drakon schrieb:
Warum sollte er dafür QT installieren?!
Weil er an dem Problem schon länger bastelt, und scheinbar das Drumherum mittels Qt geschieht...
http://qtforum.de/forum/viewtopic.php?t=8291
etc...
-
franz schrieb:
drakon schrieb:
Warum sollte er dafür QT installieren?!
Weil er an dem Problem schon länger bastelt, und scheinbar das Drumherum mittels Qt geschieht...
http://qtforum.de/forum/viewtopic.php?t=8291
etc...Alles klar. Den Thread kannte ich nicht.

-
undercover schrieb:
if (line1!=line2) { ofs << line1; ofs << "\n"; }Ich bezweifel ernsthaft das sowas wie
String1 != String2
auch nur ansatzweise laufen sollte. Die Aussage ist vermutlich so gut wie immer wahr.