[C++]String suchen und ausgeben

Mysterikum

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem:

Aus einer .txt Datei möchte ich einzelne Strings suchen und in eine Textdatei schreiben.

Die Datei sieht so aus:
Code:
PN[0]='7100501';PNonline[0]='on';APP[0]='[b] sport';

Jetzt möchte ich aus der Datei das PN=7100501,PNonline=on,APP=Spot
in eine andere Datei schreiben.

Mir fehlt der befehl zum String suchen + vergleichen.
Problem ist auch noch, das das PN[0] hochzählt, PN[1],PN[2] usw.

Hoffe ihr habt einen kleinen denkanstoß für mich.
Hier mal mein Code, den ich bis jetzt habe:
Code:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	std::ifstream eingabe("test.txt");														
	std::ofstream ausgabe("ergebnis.txt");													
 
	if (!eingabe.is_open())																	
	{																						
		cerr << "Eingabedatei konnte nicht geöffnet werden." << endl;
		return EXIT_FAILURE;
	}
	else																					
	{																						
		cout<<"Eingabedatei offen"<<endl;
	}
	if (!ausgabe.is_open()) 
	{
		cerr << "Ausgabedatei konnte nicht geöffnet werden." << endl;
		return EXIT_FAILURE;
	}
	else
	{
		cout<<"Ausgabedatei offen"<<endl;
	}


	 std::string strLine;( std::getline(eingabe, strLine) );
        {
            if( strLine.substr().compare("PN[")  )
						{
				ausgabe << strLine.substr() << std::endl;
            }
        }
		cout<<"Programm fertig"<<endl;
        eingabe.close();
        ausgabe.close();
	system("PAUSE");
    return 0;
    }
 
Zuletzt bearbeitet:
Hallo.

Ich würde erstmal nach " PN[0]' " (usw.) suchen, und an der Stelle danach anfangen den Wert auszulesen.

Ich denke am Einfachste ist es mit "sprintf" und "sscanf".
Oder du arbeitest direkt in der Datei mit "fprintf" und "fscanf".

Um diese Funnktionen zu benutzten musst du "stdio.h" einbinden.

Gruß
Anfänger
 
Nun gut erstmal zu deinem Code:
C++:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	std::ifstream eingabe("test.txt");														
	std::ofstream ausgabe("ergebnis.txt");													
 
	if (!eingabe.is_open())	// hier lieber operator! einfach nutzen ...																
	{																						
		cerr << "Eingabedatei konnte nicht geöffnet werden." << endl;
		return EXIT_FAILURE;
	}
	else																					
	{																						
		cout<<"Eingabedatei offen"<<endl;
	}
	if (!ausgabe.is_open()) // 
	{
		cerr << "Ausgabedatei konnte nicht geöffnet werden." << endl;
		return EXIT_FAILURE; // undefined ...
	}
	else
	{
		cout<<"Ausgabedatei offen"<<endl;
	}


	 std::string strLine;( std::getline(eingabe, strLine) ); // soll der c-tor von strLine mit getline gefüllt werden oder was? 
        {
            if( strLine.substr().compare("PN[")  ) // substr? wofür? du willst den Ganzen string vergleichen ... aber hier ist vergleichen eher falsch weil ja mehr in der Zeile steht als "PN[" ;) Einfach find nutzen und auf !std::string::npos vergleichen ... ;)
						{
				ausgabe << strLine.substr() << std::endl;
            }
        }
		cout<<"Programm fertig"<<endl; 
        eingabe.close(); // brauchst de nicht, wird automatisch beim verlassen des Gültigkeitsbereichs von eingabe aufgerufen ...
        ausgabe.close(); // s.o.
	system("PAUSE"); // die Funktion gibt es nicht. Zumindest hast du sie nirgendwo definiert. Es gibt höchstens std::system in <cstdlib> ....
    return 0; // unnötig ...
    }
So korrigier mal das angemeckerte und überleg dann was du da machst ... du ließt nur eine Zeile ein! :D
 
C++:
#include <iostream>
#include <string>
#include <fstream>
 
 
int main()
{
    std::ifstream file_stream("test.txt");
    if (!file_stream) { std::cerr << "FEHLER: Input not found!"; return 1; }

    std::string line;
    while (std::getline(file_stream, line))
    {
        if (line.find("PN[0]") != std::string::npos)
        { 
            std::clog << "Line found containing PN[0]!";
        }
    }
}
...
 
Zurück