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;
}