Autor Zpráva
Satizi
Profil *
Zdravim, potreboval bych od Vas poradit.

Mam eshop, ze ktereho chci exportovat priblizne 1.000 emailovych adres. Na tyto adresy chci rozesilat newslettery z obchodu. Problem je, ze mi DB vyplivla emaily ve tvaru:

22145|adresa@domena.cz

Cislo pred emailem je id zakaznika

Potreboval bych, jestli byste byli tak hodni, skript v PHP, ktery by mi odstranil ty cisla a | pred samotnou adresou a zanechal pouze emailovou adresu.
Podotykam, ze mi to DB exportovala do .txt souboru, jinou moznost nemam. Cili mam pod sebou cca 1.000 emailu, u kterych potrebuju zanechat pouze emailovou adresu.

Z 22145|adresa@domena.cz potrebuji, aby mi zustala jen samotna emailova adresa, cili adresa@domena.cz . Predem Vam mnohokrat dekuji. Zkousel jsem to pres regularni vyrazy, ale je to nad me sily.

Moderátor Joker: Titulek „Regularni vyrazy?“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Majkl578
Profil
Ono by to šlo i bez regulárů, pokud to máš jako seznam e-mailů na řádcích, rozdělit podle řádků a pak podle pajpy (svislítko) (pomocí explode).
Pomocí reguláru, to můžeš udělat např. takto:
$s = '22145|adresa@domena.cz
22145|adresa@domena.cz
22145|adresa@domena.cz';

$s = preg_replace('~^\d+\|~m', '', $s);
Satizi
Profil *
Jeste chci doplnit, ze cisel pred adresou je vzdy 6 a proste nemuzu prijit na to jak to odstranit i se svislítkem..... :-/
Majkle, jednodušší způsob by nebyl? Nějak načíst .txt soubor a vzít to jedním vrzem?
Majkl578
Profil
Ono je jedno odkud ty data jsou předem vytažena, to nahrazení se dá použít obecně. Nahradit v souboru by pak šlo jednoduše takto:
$file = '/tmp/mails'; // soubor s maily
file_put_contents($file, preg_replace('~^\d+\|~m', '', file_get_contents($file)));

Případně by to šlo snadno i v linuxovém shellu:
$ sed -i s/^[0-9]*\|//gm /tmp/mails
peta
Profil
$row = '22145|22145|22145|22145|22145|22145|adresa@domena.cz';
$col = explode('|',$row);
echo $col[6].', ';
$row = '22145|adresa@domena.cz';
$col = explode('|',$row);
echo $col[1].', ';
Joker
Profil
Satizi:
Pokud každý řádek je 6 čísel, svislítko a e-mail, šlo by i prostě vždycky odstranit prvních 7 znaků, v PHP přes substr, případně odstranit všechno po první svislítko, to je zas substr + strpos
greeny
Profil
Já bych použil variantu explode...

$soubor=file_get_contents("cesta_k_souboru.txt"); //nactu soubor
$radky=explode(chr(13), $soubor); //rozdelim ho na jednotlive radky ( chr(13) je vlastne novy radek )
foreach($radky as $radek) // cyklus projizdi cele pole jedno po druhem
{
  $casti=explode("|", $radek); // radek se rozdeli na 2 casti pres svislitko
  // zde nekam ulozim emailovou adresu, ktera je v promenne $casti[1]
  
  // napr vlozeni do databaze:
  MySQL_Query("INSERT INTO emails (email) VALUES ('".$casti[1]."')");
  
  // nebo pripsani do retezce s mailama, ktery se nakonci ulozi do souboru pomoci file_put_contents();
  $soubor.=$casti[1].chr(13);
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: