Veröffentlicht 24. Mai 200718 j 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
24. Mai 200718 j 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...
24. Mai 200718 j 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?
25. Mai 200718 j 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
25. Mai 200718 j 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(".")); }
25. Mai 200718 j Okay super, danke dir für den Tip. Das werde ich am Dienstag als erstes mal ab ändern und ausprobieren.
29. Mai 200718 j 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
29. Mai 200718 j 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.
29. Mai 200718 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.