Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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...

Geschrieben

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?

Geschrieben

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

Geschrieben

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("."));

}

Geschrieben

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

Geschrieben
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 ;)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...