Email kinyerő függvény eredménye txt-be.

Email kinyerő függvény eredménye txt-be.
2011-12-31T00:40:36+01:00
2011-12-31T17:19:54+01:00
2022-11-24T05:42:09+01:00
Gcsomesz
Sziasztok.
Van egy kész függvény amit a neten találtam és kisebb módosításokkal azt csinálja amit szeretnék, vagyis majdnem.
Amit csinál most: egy ömlesztett txt-ből kiszedi az email címeket <br/> -el elválasztva és kiírja szépen.
Amit szeretnék viszont megoldani, hogy az eredményt szintén kiíratni egy txt-be.
Amivel gondom van, hogy az eredményt nem tudom bele erőszakolni egy változóba sem és így kiíratni sem tudom.


class EmailExtract{ private $inputFile; public function EmailExtract($inFile){ $this->setinputFile($inFile); $this->writeList($this->process()); } protected function process(){ $emailList = array(); $handle = fopen($this->inputFile, 'r'); while (!feof($handle)) { $data = fgets($handle, 1024); $pattern = '/([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z._-]{2,10})/'; preg_match_all($pattern, $data, $matches); if(count($matches) != 0){ foreach($matches[1] as $item){ array_push($emailList, $item); } } } fclose($handle); return array_unique($emailList); } protected function writeList($list){ foreach($list as $key=>$value){ print $value."<br/>"; } } protected function setinputFile($inFile){ $this->inputFile = $inFile; } } //Innen olvassa be... $emails = new EmailExtract("adatbazis.txt");
Így íratnám ki, nyilván tévesen:

$wr = fopen ("eredmeny.txt","w"); fwrite ($wr, "$emails"); fclose($wr);

Köszönöm a segítséget.
Mutasd a teljes hozzászólást!
Kisebb átalakítás után így néz ki az osztály:
class EmailExtract{ private $inputFile; private $outputFile; public function EmailExtract($inFile, $outFile){ $this->inputFile = $inFile; $this->outputFile = $outFile; $this->writeList($this->process()); } protected function process(){ $emailList = array(); $handle = fopen($this->inputFile, 'r'); while (!feof($handle)) { $data = fgets($handle, 1024); $pattern = '/([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z._-]{2,10})/'; preg_match_all($pattern, $data, $matches); if(count($matches) != 0){ foreach($matches[1] as $item){ array_push($emailList, $item); } } } fclose($handle); return array_unique($emailList); } protected function writeList($list){ $handle = fopen($this->outputFile, 'w'); foreach($list as $key=>$value){ fwrite($handle, $value."\n"); } fclose($handle); } }

Használat:
$emails = new EmailExtract("adatbazis.txt", "eredmeny.txt");

Ha az eredeti kiíratást is meg szeretnéd tartani, akkor vissza kell rakni a foreach ciklusba a print-et:
... foreach($list as $key=>$value){ print $value."<br/>"; fwrite($handle, $value."\n"); } ...
Mutasd a teljes hozzászólást!

  • A $emails változó nem karakterlánc, hanem egy osztálypéldány. Szerintem az osztályt át kéne írnod úgy, hogy ne foglalkozzon a kimenetkezeléssel (és talán a fájlba írással sem). Hozz létre egy osztályváltozót, amiben a feldolgozó metódus el tudja tárolni az eredményét. Ez a változó nyilvános hozzáférésű legyen. A főprogramból ezt a tömböt járd be. A ciklusmagban egyszerre el tudod végezni a kimenetre írást és a fájlba írást is.

    $email=new EmailExtract("adatbazis.txt"); //Az osztály pl. a $Addresses tömbbe tárolta el a címeket $AddressesToFile=""; foreach ($email->Addresses as $CurrentAddr) { print "$CurrentAddr<br />"; $AddressesToFile.="$CurrentAddr\n"; } file_put_contents("cimek.txt", $AddressesToFile);
    Mutasd a teljes hozzászólást!
  • Kisebb átalakítás után így néz ki az osztály:
    class EmailExtract{ private $inputFile; private $outputFile; public function EmailExtract($inFile, $outFile){ $this->inputFile = $inFile; $this->outputFile = $outFile; $this->writeList($this->process()); } protected function process(){ $emailList = array(); $handle = fopen($this->inputFile, 'r'); while (!feof($handle)) { $data = fgets($handle, 1024); $pattern = '/([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z._-]{2,10})/'; preg_match_all($pattern, $data, $matches); if(count($matches) != 0){ foreach($matches[1] as $item){ array_push($emailList, $item); } } } fclose($handle); return array_unique($emailList); } protected function writeList($list){ $handle = fopen($this->outputFile, 'w'); foreach($list as $key=>$value){ fwrite($handle, $value."\n"); } fclose($handle); } }

    Használat:
    $emails = new EmailExtract("adatbazis.txt", "eredmeny.txt");

    Ha az eredeti kiíratást is meg szeretnéd tartani, akkor vissza kell rakni a foreach ciklusba a print-et:
    ... foreach($list as $key=>$value){ print $value."<br/>"; fwrite($handle, $value."\n"); } ...
    Mutasd a teljes hozzászólást!
  • Tökéletes köszönöm. Ráengedtem egy 5Mb-os txt-re és gond nélkül csinálta amit kell.
    Csak egy picit cseréltem, hogy egymás alá pakolja a txt-ben.
    Ezt:
    fwrite($handle, $value."\n");

    Erre:
    fwrite($handle, $value."\r\n");
    Ezer és egymillió köszönet! :)
    Mutasd a teljes hozzászólást!
  • Szia
    Bocs, hogy így vissza kérdezek még,de van egy kis gondom.
    Az a baj, hogy működik rendesen a dolog, de ha egy exportált sql-ből szeretném kinyerni az emaileket, valamiért mindig elakad ezzel a hiba üzenettel:
    Undefined index: adatbazis
    és el is akad az elágazásban és azt dobjam hogy nem töltöttem ki minden mezőt...tehát valahol eltűnik a küldött adatom? Nem értem. Vagy ekkora adat 8Mb küldése így gondot okozhat? Esetleg a speciális stringek? Nincs ötletem, reggel óta szórakozok. Sokkal jobb lenne, ha egy tömbbe rakná be az emaileket,de nem tudtam megcsinálni.
    Mutatom mik vannak:
    Ez az index:

    <div id="form"> <form action="email_feldolgozasa.php" method="post"> <p>Illesszen be a tetszőleges hosszúságú szöveget: <br/> <textarea name="adatbazis" rows="20" cols="40" wrap="virtual" /></textarea></p> <p>Írjon be egy tetzsőleges file nevet, amiben az eredményeket tároljuk. (pl.: emailcimek)</p> <input type="text" name="kimenet" size="10" maxlength="10" /> <p><input type="submit" value="Emailek kinyerése" /></p> </form>

    És ez a ami feldolgozza (bocs ebből mindent másolok, hátha valami hülyeségen bukok el):

    $adatbazis[] = $_POST['adatbazis']; $kimenet[] = $_POST['kimenet']; $date = date('Y F j,H-i'); echo $date; echo "<br/>"; if( $kimenet == "" || $adatbazis = "" ){ echo "Nem töltött ki minden mezőt! "."<br/>"; echo "Próbálja meg újra "." <a href='index.php'>Vissza<a/>"; }else{ $adatbazis_bemenet = "bemenet.txt"; $adatbazis_kimenet = "emailek/".$date."-".$kimenet.'.txt'; echo "</p>A szövegből sikeresen kinyertük az email címeket. <br/> Mit szeretne tenni? </p>"; echo "<p>Letöltöm az emaileket egy szöveg file-ban: "; echo "<a href='"; echo $adatbazis_kimenet; echo "'>Jobb klikk mentés másként!</a></p>"; echo "</p>Csak megnézem az emaileket: "; echo "<a href='"; echo $adatbazis_kimenet; echo " ' target='_blank'>Klikk</a> </p>"; echo "<a href='index.php'>Vissza új címeket kinyerni! <a/>"; $fp = fopen ("$adatbazis_bemenet","w+"); fwrite ($fp, $_POST['adatbazis'] ); include_once ("EmailExtract.php"); } ?>

    Ezt az egészet sql-el kellett volna megcsinálni, de még nem mert bele vágni,de ennyi szórakozással, biztos kisakkoztam volna azt is. :)

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd