Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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?

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

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

}

Okay super, danke dir für den Tip. Das werde ich am Dienstag als erstes mal ab ändern und ausprobieren. :)

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.