Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyszukanie wyrażenia regularnego i zapis do pliku
tchoman
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.08.2012

Ostrzeżenie: (0%)
-----


Witam serdecznie.
Mam prosty skrypt, który ma wyszukać w podanym pliku(stronie) wyrażenie(w tym wypadku wzorzec adresu mail) i zapisanie ich do nowo utworzonego pliku. Zrobiłem pętlę w której ma przeszukiwać plik linia po linii, no i nie ma efektu. Kombinowałem na różne sposoby. Gdzie robię błąd?

CODE

function zdobadz_email($strona)
{
$sprawdz = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/';
//$sprawdz = '/^(aaa)$/';

$plik = fopen($strona,'r');

$moj_plik = fopen('tymczasowy_index.txt','a');
flock($moj_plik, 2);


while(!feof($plik))
{
$linia = fgets($plik);

if ( preg_match_all($sprawdz, $linia, $wynik))
{

file_get_contents($moj_plik, $wynik);
fputs ($moj_plik, $wynik);
}
}
fclose($plik);


rewind($moj_plik);


$adresy = file('tymczasowy_index.txt');


$adres = "tchoman@poczta.onet.pl";
$tytul = "Adresy e-mail";
$wiadomosc = ("Znalezione adresy e-mail to: $adres");
mail($adres, $tytul, $wiadomosc);


flock($moj_plik, 3);


fclose($moj_plik);


//unlink($moj_plik);
}

?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tchoman
post
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.08.2012

Ostrzeżenie: (0%)
-----


Witam ponownie.
Po zabawach ze skryptem z pierwszego postu, wykombinowałem takie coś, potraktowałem to funkcją "serialize" i działa tak jak powinno.
Szuka zadanego 'regexp' i wpisuje do pliku tak jak trzeba:
Tak wygląda teraz kod:
CODE

function zdobadz_email()

{

$sprawdz = '/[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}/';
$plik = fopen('testowy.txt','r');
$moj_plik = fopen('maile.txt','w+');

flock($moj_plik, 2);



$plik = file('testowy.txt') or die('Wystąpił błąd.');
echo '<ul>';
foreach($plik as $linia)
{
if(preg_match_all($sprawdz, $linia, $wynik));
$wynik = serialize($wynik);
fputs($moj_plik, $wynik);
echo '<li>'.$linia.'</li>';
}
echo '</ul>';

flock($moj_plik, 3);
fclose($moj_plik);
//unlink($moj_plik);
}
zdobadz_email();

zamiast 'foreach' to samo uzyskałem za pomocą 'while' tu fragment kodu:
CODE

while(!feof($plik))
{
$linia = fgets($plik);
preg_match_all($sprawdz, $linia, $wynik);
$wynik = serialize($wynik);
fputs($moj_plik, $wynik);
}

Teraz mam inne pytanie, funkcja 'serialize' wpisuje mi do pliku znalezione 'regexp' w formie tablicy, wygląda to tak:

a:1:{i:0;a:1:{i:0;s:22:"tchoman@poczta.onet.pl";}}a:1:{i:0;a:1:{i:0;s:10:"dd@dcc.com";}}a:1:{i:0;a:1:{i:0;s:16:"kxkxkx@lxlxlx.pl";}}

a ja bym chciał żeby skrypt wpisał to do pliku .txt w postaci stringa

-tchoman@poczta.onet.pl
-dd@dcc.com"
-kxkxkx@lxlxlx.pl

jak przerobić kod?


Witam ponownie
Z powyższym już też sobie poradziłem, a mianowicie tak:
CODE

if(preg_match($sprawdz, $linia, $wynik));
{
//$wynik = serialize($wynik);
$wynik = implode(",", $wynik); //z 'preg_match' wywaliłem 'all' i wtedy za 'serialize' da się wykorzystać 'implode'
fputs($moj_plik, $wynik); // i wtedy ładnie zapisuje do .txt string
}
echo '<li>'.$linia.'</li>';

Ale pojawia się mały problem, 'include' jako 1 paramert może dostać separator, ja bym chciał żeby każdego 'regexp' wpisało do nowego wiersza, ale w tym przypadku nawet zwykły
"-" nie działa, niezależnie jaki separator próbuję wpisać dalej wyświetla wszystko w ciągu bez separacji.
Jak prawidłowo to zrobić ?

Edit: I z tym sobie poradziłem, trzeba tak to wpisać

$wynik = implode($wynik)."\r\n";

Ale swoją drogą wie ktoś dlaczego separator w 'implode' nie zadziałał?

Ten post edytował tchoman 12.09.2012, 19:06:07
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 18:45