Aus einer .txt die Zeile mit der richtigen Bezeichnung suchen, die folgende Zahl speichern.



  • Sehr geehrtes Forum,
    ich komme in einem Punkt nicht weiter. Über einen ifstream möchte ich eine .txt Datei lesen. Dabei werden in einer Schleife im Voraus bestimmte Zeilen (#...; leere Zeilen) übersprungen. Ich würde gerne nach eine bestimmten Bezeichnung in einer Zeile suchen("Buchstaben") und dann die der Bezeichnung folgende Zahl (129) speichern zur weiteren Manipulation. Leider konnte ich bislang nichts dazu finden.
    Die .txt sieht z.B. so aus:

    #dasdafasfw

    fasdffw
    Buchstaben 129
    asda
    #asdw
    bösdb

    Nun würde ich gerne die 129 auslesen und speichern.

    mfg



  • Und? Was hast du versucht? Woran scheitert es?

    Geschmacksmuster:

    #include <cstdlib>
    #include <string>
    #include <map>
    #include <fstream>
    #include <iostream>
    #include <sstream>
    
    int main()
    {
    	char const *filename{ "test.txt" };
    	std::ifstream is{ filename };
    	if (!is.is_open()) {
    		std::cerr << "Couldn't open \"" << filename << "\" for reading :(\n\n";
    		return EXIT_FAILURE;
    	}
    
    	std::map<std::string, int> values;
    	std::string line;
    	while (std::getline(is, line)) {
    		if (line.length() && line[0] == '#')
    			continue;
    
    		std::stringstream ss{ line };
    		std::string identifier;
    		int value;
    		if (ss >> identifier >> value)
    			values[identifier] = value;
    	}
    
    	std::cout << "Values:\n";
    	for (auto const &v : values)
    		std::cout << v.first << " = " << v.second << '\n';
    }
    

    input.txt:

    fasdffw
    Buchstaben 129
    asda
    #asdw
    bösdb
    

    Output:

    Values:
    Buchstaben = 129
    
    

  • Gesperrt

    Probiere dies,

    string get_bs (char *in)
    {
        stringstream ss(in);
        string s, before;
        while (getline(ss, s, ' '))
        {
            if (s == "")
                continue;
            if  (before == "Buchstaben")
                return s;
            before = s;
        }
        return "nö";
    }
    

    ... für jede Zeile deiner Datei.



  • Wenn es eine Übungsaufgabe ist, hast du unten zwei Lösungsvorschläge: Wenn es dein privates/berufliches Projekt ist, denke über ein strukturierteres Dateiformat nach.



  • @It0101 sagte in Aus einer .txt die Zeile mit der richtigen Bezeichnung suchen, die folgende Zahl speichern.:

    Wenn es dein privates/berufliches Projekt ist, denke über ein strukturierteres Dateiformat nach.

    Rant: Wenn es beruflich ist: denke NICHT über ein anderes Format nach. Es könnte alles kaputt gehen. Wenn es vom Kunden kommt, muss der Kunde die Änderung ggf. erst beauftragen, d.h. es kostet den Kunden viel Geld und dauert mindestens einen Monat. Und danach ist mit an Sicherheit grenzender Wahrscheinlichkeit an anderer Stelle auch was verändert worden, was, um es wieder auf einen funktionierenden Stand zu bringen, wieder mindestens einen Monat dauert. Also: lieber komische Kundenformate parsen als auf irgendwelche "komplizierten" Standardformate zu setzen.



  • @wob sagte in Aus einer .txt die Zeile mit der richtigen Bezeichnung suchen, die folgende Zahl speichern.:

    @It0101 sagte in Aus einer .txt die Zeile mit der richtigen Bezeichnung suchen, die folgende Zahl speichern.:

    Wenn es dein privates/berufliches Projekt ist, denke über ein strukturierteres Dateiformat nach.

    Rant: Wenn es beruflich ist: denke NICHT über ein anderes Format nach.

    Nachdenken verboten?
    Ich hab doch nicht gesagt, er soll alles Hals über Kopf verändern.
    Manchmal macht es Sinn, sich Ideen für die nächste Projekt-Iteration aufzuheben und sich dann eventuell die Zeit zu nehmen und bereits vorhandenes zu ändern.


Anmelden zum Antworten