schnixx Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 mit Microsoft Visual C++ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
a3quit4s Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Blumenkohl. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Haus (4 Wände) anstreichen mit Farbe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 Hallo, folgendes Problem: Ich habe eine Datei mit über 10000 Zeilen, in der mehrere Pfade enthalten sind, die sich zum Teil gleichen. Es kann also vorkommen, das in Zeile 50 und 9999 der gleiche Text steht. Ich muss diese Zeilen auswerten und eine neue Datei erstellen, in der die gleichen Zeilen mit der Anzahl an Wiederholungen aufgeführt werden. Ich habe mir gedacht, dass ich die Textdatei erstmal in ein Array einlese. Allerdings weiß ich nicht, wie ich die unterschiedlichen langes Textzeilen in Arrays schreibe. Zudem fehlt mir der Ansatz, um aus diesem Array ein String zu ziehen und diesen mit dem weiteren Inhalt des Arrays zu vergleichen. Bitte um Hilfe und Kommentare... Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 C oder C++? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 Ich solls in C++machen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Eine Möglichkeit wäre eine Map anzulegen mit der Zeile als Key und der Anzahl als Value. Wenn die Zeilen nicht all zu lang sind dürfte das auch nicht so sonderlich unperfomant sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Wenn die Zeilen länger sind, würde man die Zeile durch ein Hashverfahren jagen und dann wie gehabt, die Values dazu speichern Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 Kann ich die Textzeilen nicht in ein dynamisches Array einlesen und aus diesem Array dann den String raussuchen, diesen kopieren und mit den weiteren Zeilen vergleichen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Kann ich die Textzeilen nicht in ein dynamisches Array einlesen und aus diesem Array dann den String raussuchen, diesen kopieren und mit den weiteren Zeilen vergleichen? Ein "dynamisches Array" wäre ein std::vector und würdest Du dann bitte in diesem suchen um eine bestehende Zeile zu finden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 wie sollte ich es denn am besten angehen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
a3quit4s Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Siehe oben. Eine Möglichkeit wäre eine Map anzulegen mit der Zeile als Key und der Anzahl als Value. Wenn die Zeilen nicht all zu lang sind dürfte das auch nicht so sonderlich unperfomant sein. Wenn die Zeilen länger sind, würde man die Zeile durch ein Hashverfahren jagen und dann wie gehabt, die Values dazu speichern Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GoaSkin Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Datei öffnen und in einer while-Schleife Zeile für Zeile in einen Array schreiben. Der Array sollte in ausreichender Größe definiert sein. Werden nicht alle Elemente benötigt, ist ja nicht so schlimm. Jeder String endet mit einem EOF-Zeichen, sodass die überflüssigen Elemente dahinter im späteren Programm nicht verarbeitet werden müssen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Datei öffnen und in einer while-Schleife Zeile für Zeile in einen Array schreiben. Der Array sollte in ausreichender Größe definiert sein. Werden nicht alle Elemente benötigt, ist ja nicht so schlimm. Was soll denn dieser Murks mit Array !? Man geht davon aus, dass jede Zeile unterschiedlich lang ist und man somit nicht aus der Dateigröße errechnet werden kann, wie viele Zeilen die Datei enthält. Deshalb gibt es dynamische Strukturen: vector - C++ Reference map - C++ Reference Wenn man einen Vector nimmt, dann ist die Frage nach der Aufgabenstellung, wie man eben feststellt ob schon eine Zeile vorhanden ist, d.h. "wie sucht man in der Vectorstruktur" !? Bevor ich jetzt hier anfange Suchalgorithmen zu diskutieren, nimmt man eben eine fertige Struktur und das wäre eine std::map, dort kann man immer "Paare" speichern also Text und Zahl und kann dann einfach danach suchen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 int main() { ifstream f; string s; f.open("text.txt", ios::in); // Öffne Datei aus Parameter while (!f.eof()) // Solange noch Daten vorliegen { getline(f, s); // Lese eine Zeile cout << s << endl; // Zeige sie auf dem Bildschirm } f.close(); // Datei wieder schließen } Das ist bisher mein Quelltext.. Ich bekomme die Daten der Datei ausgegeben, wie aber kann ich diese Daten weiter verwenden, sprich eine Zeile die mit "[" anfängt raussuchen, kopieren und mit den weiteren Zeilen vergleichen? Sorry, bin gerade erst angefangen zu programmieren... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 while (!f.eof()) // Solange noch Daten vorliegenKlassischer Fehler: eof liefert erst dann true, wenn das Lesen schon einmal schiefgegangen ist. Außerdem gibt es diverse andere Gründe, warum das Lesen fehlschlagen kann. Benutz getline selbst für die Schleifenbedingung: while(getline(f, s)) ... Ich bekomme die Daten der Datei ausgegeben, wie aber kann ich diese Daten weiter verwenden Kennst du std::map? Wenn nicht, müssen wir da etwas weiter ausholen. sprich eine Zeile die mit "[" anfängt raussuchen, kopieren und mit den weiteren Zeilen vergleichen?Moment, wo kommt jetzt dieses "[" her? Musst du nur bestimmte Zeilen verarbeiten? Gibt es noch andere Anforderungen, von denne du nichts gesagt hast? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 Nein ich kenne std::map nicht...Gibt es nicht auch noch anderen Möglichkeiten dies zu realisieren? Die Pfade die ich raussuchen und mit den anderen Pfaden vergleichen muss, beginnen alle mit einer eckiger Klammer auf! Dann folgt der Pfad, der evtl. öfters vorkommt und dann wird dieser wieder mit einer eckigen Klammer geschlossen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Nein ich kenne std::map nicht...Gibt es nicht auch noch anderen Möglichkeiten dies zu realisieren?Sicher. Aber damit machst du es dir unnötig schwer. std::map ist einer der Container der Standardbibliothek. Er speichert Schlüssel/Wert-Paare. Wenn du deine zu zählenden Zeilen als Schlüssel und die Anzahl als Wert benutzt, kannst du die Zeilen ganz einfach zählen. std::map<std::string, int> m; // Der Schlüssel ist std::string, der Wert ist int ++m[s]; // Erhöht den Wert für den Schlüssel s um 1.[/code] Die Pfade die ich raussuchen und mit den anderen Pfaden vergleichen muss, beginnen alle mit einer eckiger Klammer auf! Dann folgt der Pfad, der evtl. öfters vorkommt und dann wird dieser wieder mit einer eckigen Klammer geschlossen.Das heißt, du kannst/musst alle anderen Zeilen ignorieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 23. November 2011 Autor Teilen Geschrieben 23. November 2011 Ja genau. Es kommt ein Pfad für die Registry vor und in den Zeilen darunter befinden sich dann die Values. Dann wieder ein neuer Pfad und wieder ein par Values. Mich interessieren nur die Pfade. Diese muss ich auflisten und bei gleichen Pfaden die Anzahl an Wiederholungen mit in die neue Datei schreiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Fang mal damit an, alle Zeilen in eine std::map zu stecken, statt sie auszugeben. Für std::map brauchst du #include <map> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 23. November 2011 Teilen Geschrieben 23. November 2011 Ich weiß, die Frage ist OT aber dennoch: Warum C++ und nicht irgendeine nette andere Sprache (Python, Ruby, wegen meiner auch Bash und Powershell)? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 30. November 2011 Autor Teilen Geschrieben 30. November 2011 Hallo zusammen, wie müsste ich es denn angehen, wenn die sich wiederholenden Zeilen zusammengefasst werden und die Anzahl an Wiederholungen hinter die entsprechende Zeile geschrieben werden? Ausgehend von dem folgenden Quelltext: std::ifstream in("in.txt"); std::ofstream out("out.txt"); std::string line; while(std::getline(in, line)) { if(line.length() > 0 && line[0] == '[') { out << line << '\n'; } } Danke im Vorraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. November 2011 Teilen Geschrieben 30. November 2011 Wie ich schon sagte, fang mal damit an, alle Zeilen in eine std::map zu stecken, statt sie auszugeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 30. November 2011 Autor Teilen Geschrieben 30. November 2011 Ich bin leider C++ Anfänger, deswegen verstehe ich std::map nicht wirklich. Gibt es eventuell noch andere Möglichkeiten in Kombination mit der Syntax?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 30. November 2011 Autor Teilen Geschrieben 30. November 2011 Keine Idee? Oder gibt es keine Alternativen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.