[STL] Suchen in Dateien mit istream_iterator

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.
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?
 
Zurück