Hallo Seroc++,
Das ist eine Index.php und dort stehen noch einige andere
Sachen. Die hat insgesamt 675 Zeilen, kann aber auch immer
wieder Variieren und deshalb muss ich ja erstmal die
Zeilennummer herausbekommen
Du könntest mit einem sog. „regulären Ausdruck“ suchen.
http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
In modernem C++ soll angeblich immer eine „reguläre-Ausdruck“-
Bibliothek dabeisein, in VS2010 ist das schon ziemlich gut
gelöst, in gcc (4.6) allerdings nur sehr rudimentär, es
geht fast gar nichts:
http://gcc.gnu.org/onlinedocs/libstdc++/manual/statu…
(28 - Regular expressions)
Falls Du Visual C++ 2010 oder einen ähnlichen C++0x-
konformen Compiler hast, würde folgendes gehen:
C:\> such.exe index.php
[such.cpp]
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char\* argv[])
{
// Datei oeffnen
ifstream infile( argv[1], ios::binary );
if( !infile ) return(-1);
// Datei einlesen
string html( (istreambuf\_iterator(infile)),
istreambuf\_iterator() );
// Einen Zeiger (Iterator) auf Anfang/Ende des HTML setzen
string::const\_iterator von=html.begin(), bis=html.end();
// Dingens Suche vorbereiten
smatch treffer;
regex **r("td\>Aktien:/td\>.\*?[\\n\\r].\*?td\>\\D\*(\\d+).\*?/td\>")**;
// Suchen
vector zahlen;
while( regex\_search(von, bis, treffer, r) ) {
zahlen.push\_back( stoi( treffer[1]) ); // Zahl abspeichern
von = treffer[0].second; // naechsten Treffer vorbereiten
}
// Ergebnisse ausgeben
copy( zahlen.begin(), zahlen.end(),
ostream\_iterator(cout, "\n") );
return 0;
}
Falls Du auf gcc oder einen ähnlichen Compiler ohne regex>
angewiesen bist, kannst Du auch die boost-Bibliothek verwenden:
http://www.boost.org/
Diese hat eine gut funktionierende reguläre-Ausdruck-Bibliothek,
welche fast genau wie hier gezeigt angewendet wird.
Grüße
CMБ