Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare bec far VW Touran 1T3

Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024

Cum sterg mails din Promotions
 Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...
 Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg
 Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...
 

Scoate cuvinte dintr-un text . Ajutor ....

- - - - -
  • Please log in to reply
21 replies to this topic

#1
meeesiatat

meeesiatat

    New Member

  • Grup: Members
  • Posts: 6
  • Înscris: 17.02.2009
uitati , am o problema ... nu le am cu php`u pt ca sunt la inceput dar imi doresc sa invat . Vreau sa fac urmatoarea chestie : Vreau sa fac un script in php in care sa bag eu un text de n propozitii fraze cuvinte .... si sa imi scoata toate cuvintele din text . De exemplu :

Din textul : Vreau sa invat php

sa il scoata asa:

Vreau
sa
invat
php

textului sa i pot da eu paste intr-o casuta nu sa il bag in script .

Va rog mult de tot ajutatima ... :(

#2
florindinu

florindinu

    Junior Member

  • Grup: Members
  • Posts: 177
  • Înscris: 22.03.2008
Poti folosi strtok().

Daca ma gandesc mai bine, si textul e scurt, poti folosi chiar explode() sau ca sa imparti dupa orice tip de spatiu poti folosi preg_split() cu '/\s+/' ca pattern.

Bafta

Edited by florindinu, 18 February 2009 - 00:53.


#3
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View Postflorindinu, on Feb 18 2009, 00:48, said:

Poti folosi strtok().

Daca ma gandesc mai bine, si textul e scurt, poti folosi chiar explode() sau ca sa imparti dupa orice tip de spatiu poti folosi preg_split() cu '/\s+/' ca pattern.

Bafta

care e diferența dintre strtok și explode? care e de preferat a fi folosit mai des?

#4
meeesiatat

meeesiatat

    New Member

  • Grup: Members
  • Posts: 6
  • Înscris: 17.02.2009

View PostSaurian, on Feb 18 2009, 07:54, said:

care e diferența dintre strtok și explode? care e de preferat a fi folosit mai des?

imi poti da un exemplu concret ?

vreau sa am un input unde sa bag textu .. un text mare de mii de cuvinte si sa imi scoata fiecare cuvant ....

<?php

.....

?>

ma poti ajuta ?

#5
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostSaurian, on Feb 18 2009, 08:54, said:

care e diferența dintre strtok și explode? care e de preferat a fi folosit mai des?
Uita-te putin pe ce face practic strtok() si ce face explode() si reflecteaza asupra resurselor necesare.
Deci, tu ce crezi? :P

View Postmeeesiatat, on Feb 18 2009, 18:18, said:

imi poti da un exemplu concret ?

vreau sa am un input unde sa bag textu .. un text mare de mii de cuvinte si sa imi scoata fiecare cuvant ....

<?php

.....

?>

ma poti ajuta ?
Atata timp cat return value a functiei strtok nu e FALSE folosesti intr-o bucla ceva de genul $cuvant = strtok(" .,\t\r\n"). Exemple sunt cu duiumul pe php.net/strtok.

Singurul lucru la care trebuie sa fii atent este ca la primul apel al functiei primul parametru trebuie sa fie stringul insusi.

#6
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View Postmeeesiatat, on Feb 18 2009, 17:18, said:

imi poti da un exemplu concret ?

vreau sa am un input unde sa bag textu .. un text mare de mii de cuvinte si sa imi scoata fiecare cuvant ....

<?php

.....

?>

ma poti ajuta ?

functia explode

functia strtok

Și adaugă la site-uri favorite http://www.php.net dacă vrei să continui cu PHP. E foarte complet cu exemple și cu tot ( e și normal din moment ce e site-ul oficial PHP )

View PostOriginalCopy, on Feb 18 2009, 17:27, said:

Uita-te putin pe ce face practic strtok() si ce face explode() si reflecteaza asupra resurselor necesare.
Deci, tu ce crezi? :P

Nu știu  :huh:

Eventual cere mai multe resurse strtok din cauză că memorează unde s-a ajuns la șir la un moment dat?

Iluminează-mă  :D  :P

#7
meeesiatat

meeesiatat

    New Member

  • Grup: Members
  • Posts: 6
  • Înscris: 17.02.2009

View PostSaurian, on Feb 18 2009, 17:30, said:

functia explode

functia strtok

Și adaugă la site-uri favorite http://www.php.net dacă vrei să continui cu PHP. E foarte complet cu exemple și cu tot ( e și normal din moment ce e site-ul oficial PHP )



Nu știu  :huh:

Eventual cere mai multe resurse strtok din cauză că memorează unde s-a ajuns la șir la un moment dat?

Iluminează-mă  :D  :P

uite , a fost primu lucru care l`am facut , am citit pe php.net , va rog eu mult am inteles imi dati sfaturi dar nu ma poate ajuta nimeni sa imi fac scriptuletu ca exemplu ?

Edited by meeesiatat, 18 February 2009 - 18:10.


#8
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View Postmeeesiatat, on Feb 18 2009, 18:09, said:

uite , a fost primu lucru care l`am facut , am citit pe php.net , va rog eu mult am inteles imi dati sfaturi dar nu ma poate ajuta nimeni sa imi fac scriptuletu ca exemplu ?
ce nu înțelegi? sunt și exemple la respectivele funcții

#9
florindinu

florindinu

    Junior Member

  • Grup: Members
  • Posts: 177
  • Înscris: 22.03.2008
Vrei un exemplu?

$text = 'ceva text';
print_r(explode(' ', $text));

Spor la treaba :).

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostSaurian, on Feb 18 2009, 18:30, said:

Nu știu  :huh:

Eventual cere mai multe resurse strtok din cauză că memorează unde s-a ajuns la șir la un moment dat?

Iluminează-mă  :D  :P
Si explode() de unde crezi ca-si ia stringul, sau isi salveaza stringul, nu tot in RAM? :P

Nu. Deci ambele functii isi salveaza informatiile in RAM. Diferenta este ca strtok se serveste in mod secvential cu date pe masura ce citesti, deci face mai putin uz de tabelele cu simboluri (hash tables) din interiorul zend engine.

Ok, ok ... complicat de inteles fara putine cunostinte despre php internals sau in general despre compilatoare/parsere ... deci tot scriind am decis sa renunt la explicatii :D
Pur si simplu este asa: strtok() foloseste resursele mai econom B) (nu injecteaza date in runtime decat atunci cand este nevoie de ele - la cerere)

"strtok() este pentru explode() ceea ce XMLReader este pentru DOM" cam asta e cea mai buna analogie.

LE: o sa pun la cale un benchmark

#11
florindinu

florindinu

    Junior Member

  • Grup: Members
  • Posts: 177
  • Înscris: 22.03.2008
Exemplele de pe php.net de la strtok puteau fi mai bune.

Uite cum vad eu strtok()... explode() e ok pentru a imparti un string atunci cand delimitatorul e constant, daca in schimb vrei sa faci split in functie de anumiti delimitatori ce se schimba in functie de rezultatele anterioare atunci folosesti strtok(). Practic cu strtok() faci lexical analyzers.

#12
dmxghost

dmxghost

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 06.10.2008
Explode() returneaza un array de string-uri, pe cand strtok() returneaza un singur string, si anume primul pana la delimitator. Cel putin asa vad eu problema.

$explode_ret = explode(' ', "unu doi trei");
$explode_ret[0] este egal cu "unu";
$explode_ret[1] este egal cu "doi";
$explode_ret[2] este egal cu "trei";
----
$tok = strtok("unu doi trei", ' ');

while ($tok !== false)
{
   $tok = strtok(' ');
}

$tok este egal cu "trei";
In concluzie cu explode ai stocate toate cuvintele din textul tau intr-un array de stringuri ($explode_ret[]), pe cand cu strtok ai acces la cuvinte pe rand, unul cate unul, intr-un singur string ($tok).

Edited by dmxghost, 18 February 2009 - 22:09.


#13
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
<?php
 $mem_start = memory_get_usage();
 $str = "hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world";
 $mem_str = memory_get_usage();
 
 echo "$mem_str - $mem_start = ".($mem_str - $mem_start)." (bytes used), actual len= ".strlen($str)."+1 (terminating NUL)\n";
 //---------------------------- end of testcase 1
 //unset($mem_start,$mem_str);
 $mem_start = memory_get_usage();
 $exploded = explode(' ',$str);
 $mem_exploded = memory_get_usage();
 echo "$mem_exploded - $mem_start = ".($mem_exploded - $mem_start)." (bytes used)\n";
 //---------------------------- end of testcase 2
 //unset($mem_start,$mem_exploded,$exploded);
 $mem_start = memory_get_usage();
 $tok = strtok($str,' ');
 do {
	 echo $tok;
 } while($tok = strtok(' '));
 $mem_tok = memory_get_usage();
 
 echo "\n$mem_tok - $mem_start = ".($mem_tok-$mem_start)."\n";
 //---------------------------- end of testcase 3

Ceea ce bineinteles imi ridica intrebari: daca folosesti unset() - care momentan este comentat, atunci testcase-ul 3 ocupa ... zero bytes! :lol:

Are cineva idee care e explicatia (la nivel "php internals" vorbind)?[1] florindinu? In afara de memory leak :D

LE: oricum se vede clar ca explode() foloseste cativa kilobytes buni (~50), in timp ce strtok() cateva sute de bytes.

[1] intrebare idioata, mi-am dat seama - unset() nu elibereaza acea memorie (cu efree()), ci o pastreaza pentru mai tarziu intr-un memory pool, ca in Apache's APR.

Edited by OriginalCopy, 27 February 2009 - 19:27.


#14
meeesiatat

meeesiatat

    New Member

  • Grup: Members
  • Posts: 6
  • Înscris: 17.02.2009
uitati .. am nevoie ceva de genu acesta ... pana aici m`am descurcat ...

<?php
$content = file_get_contents(text);
$p = explode(" ", $content);

echo '<br>';
echo $p[1];
echo '<br>';
echo $p[2];
echo '<br>';
echo $p[3];

?>

acesta imi ia primele 3 cuvinte din fisierul "text" .

cum fac sa imi ia toate ??

e ceva cu $p++ da nu imi dau seama cum sa fac .

ma puteti ajuta ?

#15
DarkAngelBv

DarkAngelBv

    === Proud owner of === ++++ Audi & Opel ++++

  • Grup: Senior Members
  • Posts: 12,747
  • Înscris: 24.03.2006
ce te opreste sa folosesti direct str_replace sau preg_replace? daca tot vrei doar sa inlocuiesti spatiile dintre cuvinte cu <br>.

#16
meeesiatat

meeesiatat

    New Member

  • Grup: Members
  • Posts: 6
  • Înscris: 17.02.2009
nu aia e problema . problema e cum sa fac sa imi afiseze fiecare cuvant din fisieru 'text' unu sub altu . ma poate ajuta careva ? ......

#17
dmxghost

dmxghost

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 06.10.2008

View Postmeeesiatat, on Feb 19 2009, 03:15, said:

acesta imi ia primele 3 cuvinte din fisierul "text" .
cum fac sa imi ia toate ??
N-ai inteles nimic de mai sus ...

$tok = strtok($content, ' ');

while ($tok !== false)
{
   echo $tok.'<br />';
   $tok = strtok(' ');
}

Edited by dmxghost, 19 February 2009 - 03:47.


#18
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View PostOriginalCopy, on Feb 18 2009, 20:57, said:

Ok, ok ... complicat de inteles fara putine cunostinte despre php internals sau in general despre compilatoare/parsere ... deci tot scriind am decis sa renunt la explicatii :D

atunci trimite un link de unde să mă pot documenta despre asta :)

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate