Program wyszukujący emaile w kodzie html

0

Heja, mam za zadanie napisać program który w źródle strony zapisanym do pliku .txt wyszukuje adresy mailowe i następnie wszystkie zebrane adresy zapisuje do kolejnego pliku. Taki amatorski harvester ;) Teraz sprawa wygląda tak że póki w źródle występują znaczniki html to wszystko(praaawie) gra... Program niby ma właściwy algorytm ale w którymś miejscu następuje przeładowanie stringa(sic...!) (string subscript out of range) ...Co ciekawe,czasami na tym samym pliku jednak sie uruchamia... Po czym po zmianie htmla w samym pliku znowu głupieje... Plik jaki bierze z html'em to a.txt, a zapisuje to do b.txt... Walcze z tym od rana...pomocy...
kod:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
bool czy_istnieje(const string &nazwa)
{
fstream plik;
plik.open(nazwa.c_str(), ios::in);
if(plik.is_open())
{
    plik.close();
    return true;
}
    plik.close();
return false;
}
void wyszukiwanie()
{
    int i,pos;
    fstream uchwyt_wejsciowy, uchwyt_wyjsciowy;
    string plik_wejsciowy, plik_wyjsciowy,linia,ciag="";
    string wejscie = "";//tu bedzie zawartosc calego pliku
    plik_wejsciowy=("a.txt");
    cout<<"plik z adresami";
    plik_wyjsciowy=("b.txt");
    cout<<"pliku docelowy"<<endl;
    if(czy_istnieje(plik_wejsciowy)==true)//sprawdzenie, czy plik istnieje
    {
		uchwyt_wejsciowy.open(plik_wejsciowy,ios::in);
		if(czy_istnieje("plik_wyjsciowy")==false)
				ofstream plik_wyjsciowy;//tworzenie pliku docelowego, gdy nie istnieje
		uchwyt_wyjsciowy.open(plik_wyjsciowy,ios::out);
		while(!uchwyt_wejsciowy.eof())//pobieranie znaku aż nastąpi koniec pliku
		{
				getline(uchwyt_wejsciowy,linia);
				while(linia.find('@')!=string::npos)//start przeszukiwania linii,jesli bedzie znajdywał małpe w linii...
				{
					pos=linia.find('@');
					for(i=pos;i<=linia.length();i++)//tworzenie ciagu z domeny
					{        
						if((linia[i]=='"') || (linia[i]=='<') || (linia[i]=='>')|| (linia[i]=='/')|| (linia[i]==':') || (linia[i]==' ') || (linia[i]=='\\') || (linia[i]==',') || (linia[i]=='(') || (linia[i]==')')|| (linia[i]=='#') || (linia[i]=='&'))//znaki ktore nie moga byc w emailu,i ktore sa znacznikami html
								break;
						ciag=ciag+linia[i];
						linia[i]=' ';
					}
					for(i=pos-1;i>=0;i--)//tworzenie ciagu z nazwy uzytkownika
					{        
						if((linia[i]=='"') || (linia[i]=='<') || (linia[i]=='>')|| (linia[i]=='/')|| (linia[i]==':') || (linia[i]==' ') || (linia[i]=='\\') || (linia[i]==',') || (linia[i]=='(') || (linia[i]==')')|| (linia[i]=='#') || (linia[i]=='&'))//jw
							break;
						ciag=linia[i]+ciag;
					}
					if(ciag.size()>0)
					{
						uchwyt_wyjsciowy<
					}
 
				}
		}
	}
    else
		cout<<"plik do zaszyfrowania nie istnieje"<<endl;
    uchwyt_wyjsciowy.close();
    uchwyt_wejsciowy.close();
}
int main()
{
    wyszukiwanie();
    return 0;
}
0

Eee... do tego programu... chce zrobić tak żeby użytkownik nie bawił sie z kodem źródłowym,kopiowaniem i wklejaniem do txt tylko żeby podał strone i program mu zrzucił kod do pliku txt(a wtedy go wykorzysta wyszukiwarka)...Tyle że od dwóch godzin siedze i nie ogarniam. Czytałem troche o bibliotekach cURL i urlmon.h ale nic mi z tego nie wychodzi... Ktoś wie jak konsolowy program może ściągnąć strone zapisując ją do pliku txt?

0
std::regexp rexp(R"([a-zA-Z.+\-_]+@[a-zA-Z.\-]+\.[a-zA-Z]{3,})");
std::smatch match;

if( std::regex_search( line, match, rgx ) ) {
  ofile << march[0].second << '\n';
}
0

okeeej...? w czym tomi pomoze?

0

Zamiast szukać ręcznie emaili to używasz wyrażeń regularnych, które automatycznie przypasowuje trafienia.

0

no ok... widze w sumie... ale nie chce mi sie skompilować,gdyż ponieważ iż visual 2010 nie rozpoznaje tego ... a cosik na temat ściągania poprzez program konsolowy strony do pliku txt? Bo co chwila próbuję i też nic nie działa-,-'... jakby jakaś klątwa informatyka...

1 użytkowników online, w tym zalogowanych: 0, gości: 1