VS C++ "In txt einen String nach einem anderen String durchsuchen"

Kaldera

Grünschnabel
Hallo,

ich versuche gerade ein C++ Programm zu erstellen.
Es soll eine Quell- txt zeilenweise einlesen, einen String (z.B. xyz) suchen und wenn dieser in der Zeile enthalten ist ist, die komplette Zeile in die Ziel- txt kopieren bis alle Zeilen abgearbeitet sind.

Das öffnen und kopieren ohne die Suche funktioniert aber leider eben nicht mit der Suche.

Hier einmal mein Grundgerüst:

Code:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main(void)
{	
						
	ofstream zieldat;						
	ifstream quelldat;
	string zeile;
	string Key = "xyz";
	string suche = strstr(zeile, Key);
						
	zieldat.open("E:\\txt\\zieldat.txt");						
	quelldat.open("E:\\txt\\quelle.txt");

	
		quelldat >> zeile;
		if(suche != NULL )
		{
			zieldat << zeile << endl;
		}


	zieldat.close();
	quelldat.close();

	cout << endl;
	system("Pause");
	return 0;
}

Bei der Initalisierung schein noch was faul zu sein!
Ich hatte das auch schon einmal mit

Code:
char * zeile

versucht aber dann liest das Programm zeichen weise ein und sucht nicht im gesamten String.

Ich bin für Vorschäge Dankbar.
Ich habe im Forum auch schon einiges gefunden zu dem Thema, aber das hat mir leider nicht weiter geholfen.

Gruß

Kaldera

Edit:

ich hab noch mal ein bissel probiert:

Code:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main(void)
{						
	ofstream zieldat;						
	ifstream quelldat;

	string  zeile[200];	// zu durchsuchende Zeile
	string Key = "xyz";	// zu suchende Zeichen
	char * pointer;		// Pointer bei poistiver Suche !=NULL

	cout << Key;		// Testausgabe
						
	zieldat.open("E:\\txt\\zieldat.txt");	// Ziel- txt öffnen					
	quelldat.open("E:\\txt\\quelle.txt");	// Quell- txt öffnen

	
	for(int i=0; i>10; i++)
	{
		quelldat >> zeile[i];				// 1. Zeile der Quell txt auslesen
		pointer = strstr(zeile, Key);
		if(pointer != NULL )
		{
			zieldat << zeile << endl;		// bei posiviven Fund,
											// diese Zeile in Ziel- txt schreiben
		}
	}
		

	zieldat.close();
	quelldat.close();



	cout << endl;
	system("Pause");
	return 0;
}



die strstr Funktion bekomme ich nicht zum laufen
 
Zuletzt bearbeitet:
Danke für deine Empfelung aber ich würde es gerne mit C++ versuchen.
Mit AWK kenne ich mich leider gar nicht aus, da müsste ich wieder bei 0 anfangen.
 
Hi.

Mach es mit grep oder wenn du unter Windows arbeitest findstr.

Code:
findstr xyz quelldatei.txt > zieldatei.txt

Ansonsten, zeilenweise einlesen kann man mit std::getline; suchen in einem String mit std::string::find().

Gruß
 
Zuletzt bearbeitet:
So ich hab es :)

Code:
//*Inhalt Quell- TXT*******
// 1quellxyzdatei
// 2quelldatei
// 3quelldateixyz
// 4quelldatei
//************************* 

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main(void)
{						
	ofstream zieldat;						
	ifstream quelldat;
	string Zeile;
	int anzahl = 0;
	int funde = 0;
						
	zieldat.open("E:\\txt\\zieldat.txt");	// Ziel- txt öffnen					
	quelldat.open("E:\\txt\\quelldat.txt");	// Quell- txt öffnen

	do
	{
		anzahl++;		// Eintäge zählen

		getline(quelldat, Zeile);
		string::size_type loc = Zeile.find( "xyz", 0 );
		cout << Zeile;
		cout << endl << endl;
	
		if( loc != string::npos )
		{
			funde++;	// Fundstellen zählen

			cout << "Found xyz at " << loc << endl;
			zieldat << Zeile << endl;
		}
		else
		{
			cout << "Didn't find xyz" << endl;
		}
	}while(!quelldat.eof());

	system("cls");
	cout << "Es wurden " << anzahl << " Eintraege durchsucht und" << endl;
	cout << funde << " gesichert" << endl; 

	zieldat.close();
	quelldat.close();

	cout << endl;
	system("Pause");
	return 0;
}

jetzt noch verfeinern und fertig.

Danke an alle
 
Ich will dich nicht von deinen Bemühungen, C++ zu lernen, abbringen, aber ich empfehle dir, dich wirklich mal einen Tag lang ernsthaft mit dem AWK zu beschäftigen. 90% meiner Programme schreibe ich in C++/C#/Java, aber ich habe immer wieder gemerkt, wie nützlich es ist, für manche Problemstellungen einfach mal auf die Schnelle ein AWK-Skript zu erstellen.
 
@ deepthroat:

habe mir den Beitrag (EOF) durch gelesen und werde es abändern.
THX

@ Vereth:

OK ich werde mir mal AWK anschauen
Danke

Gruß Kaldera
 
Zurück