Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Rozdělení stringu podle počtu slov nebo jinak

David Kácha
verified
rating uzivatele
(39 hodnocení)
27. 4. 2012 23:15:06
Hezký večer,
tak jsem jednou zase beznadějný. Potřebuju rozdělit daný text na části ideálně podle počtu slov, ale to se mi nic nepovedlo vygooglit.
Tak aspoň podle počtu znaků, ale tam tam mám problém se znaky viz www.iedit.cz/hledani/ .
Jak se zbavit toho balastu?
$fp = FOpen ("./inc/o-systemu.php", "r"); // otevře soubor data.txt pro čtení
$data = FRead ($fp, FileSize ("./inc/o-systemu.php")); // načte do proměnné $data obsah souboru data.txt
FClose ($fp);
$data = (strip_tags("$data"));
$data = (chunk_split("$data","50",".-!-."));
echo $data;
děkuju, děkuju
---------- Příspěvek doplněn 27.04.2012 v 23:17 ----------
viz třeba &scar má bejt š
---------- Příspěvek doplněn 27.04.2012 v 23:29 ----------
Teoreticky by šlo celý text rozdělit, každé slovo do jednoho pole, ale to mi připadá trochu zbytečně zpomalující.
27. 4. 2012 23:15:06
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759705
RoyalManG
verified
rating uzivatele
(1 hodnocení)
27. 4. 2012 23:30:22
čo tak rozdeliť reťazec pomocou explode, reťazec by sa rozdeľoval v medzerách medzi slovami a pomocou jednoduchého cyklu spočítal počet slov a po určitom počte ich pomocou implode znovu spojiť po určitom počte
27. 4. 2012 23:30:22
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759704
David Kácha
verified
rating uzivatele
(39 hodnocení)
27. 4. 2012 23:33:16
Napsal RoyalManG;789816
čo tak rozdeliť reťazec pomocou explode, reťazec by sa rozdeľoval v medzerách medzi slovami a pomocou jednoduchého cyklu spočítal počet slov a po určitom počte ich pomocou implode znovu spojiť po určitom počte
Omlouvám se, napadlo mě ti před minutkou viz výše, ale není to pomalé? Když budu mít najednou pole s několika stovkami (spíš pak tisící) polí. Kéž by to šlo jednodušeji ...
27. 4. 2012 23:33:16
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759703
bismarc
verified
rating uzivatele
(1 hodnocení)
28. 4. 2012 00:36:43
A ake je kodovanie toho textu? v tom o-systemu.php subore?
28. 4. 2012 00:36:43
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759702
David Kácha
verified
rating uzivatele
(39 hodnocení)
28. 4. 2012 01:09:21
Napsal bismarc;789828
A ake je kodovanie toho textu? v tom o-systemu.php subore?
Právě na to koukám a tam bude asi zakopán problém
obsah je
Dá se to převést do utf?
28. 4. 2012 01:09:21
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759701
Bacon
verified
rating uzivatele
(2 hodnocení)
28. 4. 2012 08:24:44
No, mně se ten samotný soubor o-systemu.php zobrazuje pěkně, když si v prohlížeči nastavím kódování UTF-8. To, co tam máš, jsou jen entity, jiné vyjádření speciálních znaků.
Teď jsem si s tím ještě hrál, entity rozhodí řádek
$data = (chunk_split("$data","50",".-!-."));
V komentářích pod tou funkcí jsou různé návody na funkce (např. HtmlEntitySafeSplit), které by měly umět pracovat i s textem plným HTML entit.
Úplně jsem nepochopil, co má ta funkce chunk_split, kterou používáš, dělat. No, to je jedno, zkusil jsem tohle a jak se zdá, funguje to:
$fp = FOpen ("./inc/o-systemu.php", "r"); // otevře soubor data.txt pro čtení
$data = FRead ($fp, FileSize ("./inc/o-systemu.php")); // načte do proměnné $data obsah souboru data.txt
FClose ($fp);
$data = (strip_tags("$data"));
//$data = htmlspecialchars_decode( $data );
//$data = (chunk_split("$data","50",".-!-."));
$data = wordwrap( $data, 50, '.-!-.' );
echo $data;
?>
Áááha, už vím ten rozdíl. Funkce chunk_split dělí bez ohledu na okolní znaky, wordwrap dělí pouze slova (podle mezer). Tak teď nad tím ještě jdu koumat.
---------- Příspěvek doplněn 28.04.2012 v 08:42 ----------
Tak co jsem koukal, ty html entity se mi nedaří převést zpět (v prohlížeči se samozřejmě ukazují v pořádku), asi by to chtělo mít tabulku znaků a tabulku entit a nahrazovat, no... :/
---------- Příspěvek doplněn 28.04.2012 v 09:01 ----------
Líbej mi nohy, děkuji:
$fp = FOpen ("./inc/o-systemu.php", "r"); // otevře soubor data.txt pro čtení
$data = FRead ($fp, FileSize ("./inc/o-systemu.php")); // načte do proměnné $data obsah souboru data.txt
FClose ($fp);
$data = (strip_tags("$data"));
$data = html_entity_decode( $data, NULL, 'UTF-8' );
$data = (chunk_split("$data","50",".-!-."));
echo $data;
?>
EDIT: Každopádně já bych se asi stejně raději pokoušel použít buď wordwrap, nebo explode. Na porovnání zátěže si můžeš udělat benchmark. Každopádně rozdělit podle slov a pak vypsat na každý řádek 5 slov, to by bylo pomocí explode a cyklu jednoduché :)
---------- Příspěvek doplněn 28.04.2012 v 09:23 ----------
Ještě koukám, že dělit na slova (do arraye) umí funkce str_word_count, používá se takto:
str_word_count ( $data, 1, 'áčďéěíňóřšťúůýž' );
Jako druhý parametr bere 0 (= vypíše pouze počet slov), 1 (= uloží do pole ve tvaru => slovo), 2 (= uloží do pole ve tvaru => slovo). Jako třetí parametr bere speciální znaky, které se mají brát jako součást slova (tedy bylo nutno doplnit českou diakritiku).
28. 4. 2012 08:24:44
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759700
David Kácha
verified
rating uzivatele
(39 hodnocení)
28. 4. 2012 16:01:20
Napsal Bacon;789843
No, mně se ten samotný soubor o-systemu.php zobrazuje pěkně, když si v prohlížeči nastavím kódování UTF-8. To, co tam máš, jsou jen entity, jiné vyjádření speciálních znaků.
Teď jsem si s tím ještě hrál, entity rozhodí řádek
$data = (chunk_split("$data","50",".-!-."));
V komentářích pod tou funkcí jsou různé návody na funkce (např. HtmlEntitySafeSplit), které by měly umět pracovat i s textem plným HTML entit.
Úplně jsem nepochopil, co má ta funkce chunk_split, kterou používáš, dělat. No, to je jedno, zkusil jsem tohle a jak se zdá, funguje to:
$fp = FOpen ("./inc/o-systemu.php", "r"); // otevře soubor data.txt pro čtení
$data = FRead ($fp, FileSize ("./inc/o-systemu.php")); // načte do proměnné $data obsah souboru data.txt
FClose ($fp);
$data = (strip_tags("$data"));
//$data = htmlspecialchars_decode( $data );
//$data = (chunk_split("$data","50",".-!-."));
$data = wordwrap( $data, 50, '.-!-.' );
echo $data;
?>
Áááha, už vím ten rozdíl. Funkce chunk_split dělí bez ohledu na okolní znaky, wordwrap dělí pouze slova (podle mezer). Tak teď nad tím ještě jdu koumat.
---------- Příspěvek doplněn 28.04.2012 v 08:42 ----------
Tak co jsem koukal, ty html entity se mi nedaří převést zpět (v prohlížeči se samozřejmě ukazují v pořádku), asi by to chtělo mít tabulku znaků a tabulku entit a nahrazovat, no... :/
---------- Příspěvek doplněn 28.04.2012 v 09:01 ----------
Líbej mi nohy, děkuji:
$fp = FOpen ("./inc/o-systemu.php", "r"); // otevře soubor data.txt pro čtení
$data = FRead ($fp, FileSize ("./inc/o-systemu.php")); // načte do proměnné $data obsah souboru data.txt
FClose ($fp);
$data = (strip_tags("$data"));
$data = html_entity_decode( $data, NULL, 'UTF-8' );
$data = (chunk_split("$data","50",".-!-."));
echo $data;
?>
EDIT: Každopádně já bych se asi stejně raději pokoušel použít buď wordwrap, nebo explode. Na porovnání zátěže si můžeš udělat benchmark. Každopádně rozdělit podle slov a pak vypsat na každý řádek 5 slov, to by bylo pomocí explode a cyklu jednoduché :)
---------- Příspěvek doplněn 28.04.2012 v 09:23 ----------
Ještě koukám, že dělit na slova (do arraye) umí funkce str_word_count, používá se takto:
str_word_count ( $data, 1, 'áčďéěíňóřšťúůýž' );
Jako druhý parametr bere 0 (= vypíše pouze počet slov), 1 (= uloží do pole ve tvaru => slovo), 2 (= uloží do pole ve tvaru => slovo). Jako třetí parametr bere speciální znaky, které se mají brát jako součást slova (tedy bylo nutno doplnit českou diakritiku).
Díky díky, to $data = html_entity_decode( $data, NULL, 'UTF-8' ); už skoro funguje (akorát tam zůstávaj nějaké velké mezery), ale stejně nejlíp mi nakonec vyšlo
$Old = array('á', 'Á', 'é', 'É', 'í' ,'Í', 'ó',
'Ó', 'ú', 'Ú', 'ý', 'Ý', 'č', 'Č', 'ď',
'Ď', 'ě', 'ě', 'ň', '&Ncaro;', 'ř', 'Ř', 'š', 'Š',
'ť', 'Ť', 'ž', 'Ž', ' ', '–', '„', '“');
$New = array('á', 'Á', 'é', 'É', 'í', 'Í', 'ó', 'Ó', 'ú', 'Ú', 'ý', 'Ý', 'č', 'Č', 'ď', 'Ď', 'ě', 'Ě', 'ň',
'Ň', 'ř', 'Ř', 'š', 'Š', 'ť', 'Ť', 'ž', 'Ž', ' ', '–', '„', '“' );
$data = str_replace($Old, $New, $data);
28. 4. 2012 16:01:20
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759699
Bacon
verified
rating uzivatele
(2 hodnocení)
28. 4. 2012 16:02:18
Skoro funguje? Mně funguje bez problémů. :) Rádo se stalo každopádně.
28. 4. 2012 16:02:18
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759698
David Kácha
verified
rating uzivatele
(39 hodnocení)
28. 4. 2012 23:48:02
Napsal Bacon;789922
Skoro funguje? Mně funguje bez problémů. :) Rádo se stalo každopádně.
Myslím, že to převádělo něják blbě mezery :)
28. 4. 2012 23:48:02
https://webtrh.cz/diskuse/rozdeleni-stringu-podle-poctu-slov-nebo-jinak/#reply759697
Pro odpověď se přihlašte.
Přihlásit