Kachelator
Peter Jerz
In einem anderen Thread fragte jemand nach einer Möglichkeit, Dateien nach Zeichenfolgen zu durchsuchen.
Mir hat die Frage keine Ruhe gelassen und ich war neugierig, was man da mit der STL ausrichten könnte. Dabei habe ich VC++6 und VC .Net ausprobiert. Ich bin dabei auf ein merkwürdiges Problem gestossen. Vielleicht kann mir jemand sagen, was da falsch läuft. (Gesucht wurde in einer reinen Textdatei. )
Folgende Lösung funktionierende ist bisher die einfachste, auch wenn die komplette Datei in einen String eingelesen wird.
Mich ärgert es aber, dass ich anscheinend nicht die istream_iteratoren direkt an den search-Algorithmus übergeben kann wie hier:
Das heisst, ich kann es, aber es funktioniert unerwarteterweise nicht. Weiss jemand, woran das liegt?
Mir hat die Frage keine Ruhe gelassen und ich war neugierig, was man da mit der STL ausrichten könnte. Dabei habe ich VC++6 und VC .Net ausprobiert. Ich bin dabei auf ein merkwürdiges Problem gestossen. Vielleicht kann mir jemand sagen, was da falsch läuft. (Gesucht wurde in einer reinen Textdatei. )
Folgende Lösung funktionierende ist bisher die einfachste, auch wenn die komplette Datei in einen String eingelesen wird.
Code:
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
// Das geht:
int main()
{
using namespace std;
// Datei in String
ifstream i( "test.txt" );
string text;
text.assign( istream_iterator<char>(i), istream_iterator<char>() );
// zu suchende Zeichenkette
string searchthis( "56" );
// suchen
string::iterator it2 = search( text.begin(), text.end(),
searchthis.begin(), searchthis.end() );
// ausgeben ab Fundstelle
copy( it2, text.end(), ostream_iterator<char>( cout ) );
return 0;
}
Mich ärgert es aber, dass ich anscheinend nicht die istream_iteratoren direkt an den search-Algorithmus übergeben kann wie hier:
Code:
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
// Das geht nicht:
int main()
{
using namespace std;
// Datei
ifstream i( "test.txt" );
// zu suchende Zeichenkette
string searchthis( "56" );
// suchen
istream_iterator<char> it2 = search( istream_iterator<char>(i), istream_iterator<char>(),
searchthis.begin(), searchthis.end() );
// ausgeben ab Fundstelle
copy( it2, istream_iterator<char>, ostream_iterator<char>( cout ) );
return 0;
}
Das heisst, ich kann es, aber es funktioniert unerwarteterweise nicht. Weiss jemand, woran das liegt?