sterge rand ce contine cuvant

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
steell
Mesaje:190

sterge rand ce contine cuvant

salut.
1: am de exemplu un fisier txt (sau php nu conteaza asta) in care sunt scrise zeci de linii.
cum fac sa sterg intreg randul care contine un anumit cuvant specificat intr-un formular?
2:cum fac sa sterg spatiile dintr-o propozitie?
ex: "eu merg la scoala" sa iasa "eumerglascoala"
m-am gandit la functia str_replace(), o alta metoda mai stiti?

MarPlo Mesaje:4343
Salut
Ca sa stergi randurile dintr-un fisier, ce contin un anumit cuvant; restul fiind pastrate, poti folosi acest model (cuvantul anumit il preiei cum stii):

Cod: Selectaţi tot

<?php
$str = 'anumit_cuvant';

// preia randurile din "nume_fisier.txt" in array
$ardata = file('nume_fisier.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nrows = count($ardata);

// parcurge array-ul, sterge elementele ce contin sirul de la $str
$keepdata = array();
for($i=0; $i<$nrows; $i++) {
  if(stripos($ardata[$i], $str) !== false) unset($ardata[$i]);
}

$ardata = array_merge($ardata);      // reordoneaza cheile in array

// scrie in 'nume_fisier.txt' randurile ramase
file_put_contents('nume_fisier.txt', implode("\n", $ardata));
?>
Ca sa stergi toate spatiile dintr-un sir, cel mai indicat e cu str_replace(), chiar daca se poate si cu alte functii, aceasta e cea mai rapida.
Exemplu:

Cod: Selectaţi tot

<?php
$str = 'eu merg   la scoala';
$str = str_replace(' ', '', $str);
echo $str;           // eumerglascoala
?>

steell Mesaje:190
am incercat scriptul pentru stergere cuvant din fisier dar imi sterge tot ce e in fisier :(
nu numai randul ce contine cuvantul specificat.

MarPlo Mesaje:4343
Inlocuieste:

Cod: Selectaţi tot

if(stripos($ardata[$i], $str) >= 0)
Cu acesta:

Cod: Selectaţi tot

if(stripos($ardata[$i], $str) !== false)
Sau copie din nou tot codul, fiindca am modificat.

steell Mesaje:190
functioneaza. insa mai sunt 2 conditii: la sfarsitul continutului fisierului imi dauga un caracter, e ca un patratel cred ca sti cum apare din cauza ca nu stie notepadul ce caracter este. cum fac sa nu apara acest caracter?
si a doua, vreau ca dupa ce adauga noul continut in fisier sa treaca la linie noua la sfarsit dar fara sa scrie ceva pe acea linie adica ca si cum as apasa enter si trece la linie noua, asta pentru ca eu adaug in acel fisier date dintr-un formular si am setat ca fiecare post sa-l treaca pe linie noua asa

Cod: Selectaţi tot

fwrite($handl,'mesaj ce apare in fisier');
fclose()
si imi trece automat un "enter". cred ca ai inteles cam ce as vrea.multumesc

MarPlo Mesaje:4343
Ca sa adaugi caracter de linie noua la un rand, poti folosi: "\n" (pt. Linux /Unix), "\r\n" (pt. Windows), sau constanta PHP_EOL .

Cod: Selectaţi tot

fwrite($handl,'mesaj ce apare in fisier'. PHP_EOL);
Nu stiu ce caracter e acel patratel, probabil ca in PHP e folosit UTF-8, incearca sa adaugi in codul PHP, inainte de linia ce scrie in fisier, header pt. ASCII / ISO:

Cod: Selectaţi tot

header('Content-Type: text/plain; charset=ISO-8859-1');
Daca nu merge cu acest header(), nu stiu altfel.

steell Mesaje:190
am rezolvat modificand linia asta

Cod: Selectaţi tot

file_put_contents('nume_fisier.txt', implode("\n", $ardata));
cu astea doua

Cod: Selectaţi tot

file_put_contents('nume_fisier.txt', implode("\n", $ardata).'');
 
si imi trece la rand nou si a disparut si patratelu ala
era chiar simplu da' eram prea obosit atunci sa-mi dau seama.
multumesc pentru script