onkel-wolle Geschrieben 24. Mai 2007 Teilen Geschrieben 24. Mai 2007 Hi, zu meinem Problem: Ich habe eine Textdatei die ich komplett in einen string lade. In der Datei stehen eine ganze menge von Zeilen die so aussehen: 2007-05-10 10:44:04;ALM_PLA_GNAH_LU_MHH_11_0_1;0.0000000000 2007-05-10 10:44:04;ALM_PLA_GNAH_LU_MHH_11_2_3;4096.0000000000 2007-05-10 10:44:04;ANA_PLA_GNAH_LU_MHH_11_2_5;65536.0000000000 Ich möchte nun, aus lediglich den Zeilen in denen ALM steht die Zahl die vor dem Punkt mit den folgenden 10 nullen haben. Meine Idee war es, das ich die in den String geladene Datei nach dem ALM abfrage und dann irgendwie nach dem zweiten Semikolon suche und dann den Wert bis zu dem Punkt in eine andere Variable schreibe. Nun bin ich wie gesagt soweit gekommen das ich die Datei in einen string geladen hab und nun hängts bei mir. Ich bin nicht so extrem Fit in C++ und wäre für andere Lösungen oder Tipps sehr dankbar! gruß onkel-wolle Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 24. Mai 2007 Teilen Geschrieben 24. Mai 2007 Ich würde die Datei nicht komplett in einen String laden. Geht zwar auch, aber wenn du die Zeilenweise einliest dann wirds denke ich einfacher. Wo hängts denn genau? Wenn du jetzt eine Zeile in einem String hast solltest du über irgendeine find Methode die dir std::string anbietet das Semikolon finden und dann hast du ja deine Zahl. Wenn du die dann noch in eine Zahlvariable umwandeln willst kannst du das mit einem stringstream machen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
onkel-wolle Geschrieben 24. Mai 2007 Autor Teilen Geschrieben 24. Mai 2007 Also momentan lese ich die Datei so ein: string datenEinlesen, zeile; ifstream inputDatei("test.txt"); while(!inputDatei.eof()) { datenEinlesen = inputDatei.get(); } Wie lese ich die denn Zeilenweise ein? Und wie meinst du das mit der find Methode? Wenn ich sowas habe nimmt er dann nur die Zahl oder ab dem Semikolon den rest des strings, also auch den Punkt und die restlichen Nullen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
onkel-wolle Geschrieben 25. Mai 2007 Autor Teilen Geschrieben 25. Mai 2007 Mh bin ich blöde oder warum finde ich keinen Button um meinen vorherigen Beitrag zu editieren? Naja dann muss leider ein doppel Post her sorry. Also ich habe es jetzt so gelöst: string datenEinlesen1, datenEinlesen2, datenEinlesen3, datenEinlesen4, datenEinlesen5; string test="ANA"; ifstream inputDatei("textdatei.txt"); while(!inputDatei.eof()) { getline(inputDatei, datenEinlesen1,';'); getline(inputDatei, datenEinlesen2,'_'); if (datenEinlesen2!=test) { getline(inputDatei, datenEinlesen3,';'); getline(inputDatei, datenEinlesen4,'.'); getline(inputDatei, datenEinlesen5); cout << datenEinlesen4; cout << endl; } } Damit hab ich dann meine Zahl zum weiter bearbeiten. Ich weiß nicht obs die beste Möglichkeit ist, aber es funktioniert. Danke für die Tips übrigens onkel-wolle *edit* ich hab den Button gefunden, nur er war bei meinem anderen Beitrag nicht mehr da :beagolisc Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pit030771 Geschrieben 25. Mai 2007 Teilen Geschrieben 25. Mai 2007 Es wäre besser wenn du auch nach dem suchst was du haben willst. string test="ANA"; besser string test="ALM"; denn wenn sich an der spez was ändert hast du plötzlich sachen da drin die nich dahin gehören. 2007-05-10 10:44:04;ALM_PLA_GNAH_LU_MHH_11_2_3;4096.000000000 es besser wenn du eine ganze zeile einließt, denn in deinem fall würde wenn deine if bedingung nicht eintritt wieder bis zu eienm ; und anschließen bis zu einem _ dann wäre datenEinlesen1:= "PLA_GNAH_LU_MHH_11_2_3" datenEinlesen2:= "4096.000000000\n2007-05-10 10:44:04;ALM" damit wist du nach dem ersten nichts mehr finden so könnte man das machen getline(inputfile, zeile, '\n'); if(zeile.find(test) != -1) { int index = (int)zeile.find_last_of(";") +1; string result = zeile.substr(index, zeile.find(".")); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
onkel-wolle Geschrieben 25. Mai 2007 Autor Teilen Geschrieben 25. Mai 2007 Okay super, danke dir für den Tip. Das werde ich am Dienstag als erstes mal ab ändern und ausprobieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
onkel-wolle Geschrieben 29. Mai 2007 Autor Teilen Geschrieben 29. Mai 2007 Wunderbar, das hat soweit geklappt. Ich musste bei dem substring nur noch etwas anpassen: k = zeile.find(".") - index; result = zeile.substr(index, k); Er braucht da ne Zahl wie weit er Zählen soll und nicht bis zu welcher Stelle Danke nochmal onkel-wolle Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pit030771 Geschrieben 29. Mai 2007 Teilen Geschrieben 29. Mai 2007 ja aber die methode .find gibt doch eine zahl zurück! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 29. Mai 2007 Teilen Geschrieben 29. Mai 2007 Der zweite Parameter von substr bestimmt aber die Anzahl der Zeichen, nicht die Endposition. Deshalb kann man da den Rückgabewert von find nicht direkt verwenden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pit030771 Geschrieben 29. Mai 2007 Teilen Geschrieben 29. Mai 2007 ok, hab das auch nicht ausprobiert nur so getippert danke! auch wieder was gelernt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
onkel-wolle Geschrieben 29. Mai 2007 Autor Teilen Geschrieben 29. Mai 2007 Der zweite Parameter von substr bestimmt aber die Anzahl der Zeichen, nicht die Endposition. Deshalb kann man da den Rückgabewert von find nicht direkt verwenden. Ja das meinte ich, habs etwas blöde vielleicht ausgedrückt 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.