« 1 2
Autor Zpráva
Anonymní
Profil *
TrueFriend
hmm to netusim, ja mam php 5.14, apache 2.0.58
TrueFriend
Profil
FUNGUJEEE!

Mezera se odstranila a všechno je OK.
děkuju moc všem...

jen ještě jedna taková drobnost...
co když budu chtít diakrtitiku ponechat?
TrueFriend
Profil
a ještě jedna věcička.
Když budu chtít daný text nahrávat ze soubru, tak to z nějakého důvodu nejde... výsledkem je jen prázdná stránka.

Soubor.txt:
Pískový úhoř plul tekutým horkým pískem na poušti.

Předělaný script...
<?php

$sText = file ('soubor.txt');
$sStart = 'ÚHOŘ';
$sEnd = 'PÍSKEM';

$sText = StandartString ($sText);
$sStart = StandartString ($sStart);
$sEnd = StandartString ($sEnd);

$sBuffer = StrihaniString ($sStart, $sEnd, $sText);
$sVysledek = $sBuffer[1][0];

function StrihaniString ($sStart, $sEnd, $sText){

$pattern ='/'.$sStart.'(.*)'.$sEnd.'/i';
preg_match_all($pattern, $sText, $pole);
//print_r($matches);

//$re_phrase = '([a-zA-Z0-9 \_]+|[+-]|[ ]?["]+[ ]+["]|[ ]?[\']+[ ]+[\'])';

//preg_match_all($re_phrase, $query, $pole);

return $pole;
}

function StandartString ($sBuffer){
//Tato funkce odstrani diakritiku a velka pismena prevede na mala...
$sBuffer=StrTr($sBuffer,"áÁéÉíÍóÓúÚůŮýÝěĚšŠčČřŘžŽťŤďĎňŇQWERTYUIOPASDFG HJKLZXCVBNM","aaeeiioouuuuyyeessccrrzzttddnnqwertyuiopasdfghjklzxcvbnm ");
return $sBuffer;
}

echo $sVysledek;

?>

Mělo by to tak fungovat, nebo se pletu? :)
Anonymní
Profil *
hehe no to je teprve to zaujimave... mozes skusit nastudovat iconv, co sa dost casto pouziva na prekodovanie retazcov (ja som to zatial este nepouzil) alebo mozes tie znaky diakritiky niecim jedinecnym nahradit a pri vystupe znova naspet
Anonymní
Profil *
chyba ti tam cyklus:
$fd = fopen ("text.txt", "r");
while (!feof ($fd)) {
$buffer .= fgets($fd, 4096);
}
fclose ($fd);
echo $buffer;
TrueFriend
Profil
jo, tak už to jde ze souboru... děkuju moc.

Jinak s tím iconv, tak jsem pochytil zatím tohle...

$str = iconv("iso-8859-2","utf-8","Testovací řetezec");

ale to spíš ten text rozhodí, než dá nějak do kupy...
TrueFriend
Profil
A nebo ještě převod string z utf na iso pomocí iconv()

function utf2iso($str) {
return mb_convert_encoding($str, "ISO-8859-2", "UTF-8");
}

Ale jak to včelnit do toho scriptu...
zatím hledám, jak vypnu ten převod z velikosti písmen na jinou velikost a vynout to odstranovani diakrtitiky...
pavel Prochazka.zde.cz
Profil *
to anonim: funkce iconv je pro prevod mezi ruznema kodovani znaku. A velice pochybuji ze existuje nejaky flag ktery rekne preved tento text na mala pismena a odstran diakritiku. Na to jsou jine funkce ale zde mam dve funkce v jedne :) a co se tyce rychlosti, tak to je zdela nepodstatne, pokud nehodlate funkci pouzivat v silenem cyklu...
pavel Prochazka.zde.cz
Profil *
to TrueFriend:
kod co jsem ti poslal ti nikdy nic nemapise, protoze nama zadny vystup. Kod jsem jen odkrokoval v debugeru a tam jede. Ty si jeste musis dopsat nejakou metodu pro zobrazeni vysledku. proto jsem ti take psal ze vysledek je v te a te promenne....
Co se tyce te mezery ve funkci, tak se nejak objevila navic v kodu ji mamam. Ja mam WinXP a PHP4 to proto ze mam PHP4 i na freehostingu....
Anonymní
Profil *
na zmensenie by sa dalo pouzit strtolower()
iconv som nespominal preto aby odstranil diakritiku ale aby po prekodovani znakovej sady bol schopny ten retazec vyhodnotit regularnym vyrazom, je mi jasne ze ked daco meni znakovu sadu ze to asi neodstranuje makcene, co by vpodstate znamenalo zamenu ascii kodu znaku
TrueFriend
Profil
To je otázka... jak přesně docílit toho aby to dokázalo vyhodit text v té podobě co je v tom souboru.

Jsou dvě možnosti...
buď načíst znaky s diakritikou a pak je před samotným zpracování převést do jiného kódování s kterým by zpracování nemělo problém (třeba pomocí šifrování) a pak je zase "dešifrovat" před výstupem. Ale pak by to chtělo šifrovací a dešifrovací třídu, aby bylo podle čeho zpracovávat...

nebo načíst znaky tak jak jsou a doufat, že PHP vezme češtinu, ale to moc častý jev není. Aspoň neznám funkce, které by umožňovali zpracovávat text 1:1. A zditovní prováděli pouze jako přemostění operace "oškubání toho textu během zpracovávání).
Něco jako by to bylo funkcí TRIM (ltrim, rtrim, apod..), ale to by byl moc složitý script na to, co se od něj žádá.

Mohla by být ještě třetí možnost, ale o nic mne zrovna nenapadá...
pavel Prochazka.zde.cz
Profil *
to trueFried:

Nikdy jsem nevidel zadny slozity program, jen jsem zazil ze neumim nebo nevim. Kdyz si okolnosti vyzaduji, tak je potreba napsat slozitejsi algoritmus...
Ja bych to videl asi takto: Pouzilo by se to co jsem napsal pro vyhodnoceni, tim odpadne problem s cestinou a roznou velikosti pismen. Funkce by ale misto textu vratila, pozici oz zacatku stringu a delku, kterou se ma vyriznout. Cele porovnavani se provadi s textem bez cestiny a s malema pismenama. A vysledny text se potom nadradi puvodnim retezcem kde je diakritika a velka pismena.
Jak zjistit kde se nachazi pozadovany text, kdyz jsem si prohlizel prikazy php, tak mam takove tuseni za existuje funkce ktera hleda zadany text (tam se vlozi to co kod oriznul cily promenou sVysledek) a porovna ho s puvodnim textem, taky protahnuty pres funkci StandartString. A ejhle mame u pozici hledaneho stringu :). Tyto hodnoty se pouziji pro oriznuti puvodniho textu.... Co je na tom tak sloziteho, jen dva radky navic.....
Jestly budu mejt cas tak se na to odivam jeste jednou, ale tedka jedu do Brna....
TrueFriend
Profil
oki, díky moc.
v Brně jsem byl nedávno :) pěkný město...
pavel Prochazka.zde.cz
Profil *
Tak zde je posledni slibena verze:
ktera vrati vse pekne v cestine ale interne pracuje s malema pismenkama a bez castiny


kod:

<?php

$sText = 'Pískový úhoř plul tekutým horkým pískem na poušti.';
$sStart = 'ÚHOŘ';
$sEnd = 'PÍSKEM';


$sVysledek = StrihaniString ($sStart, $sEnd, $sText);

function StrihaniString ($sStart, $sEnd, $sText){
$sBuffer= StandartString (Trim($sText));
$sStart= StandartString (Trim($sStart));
$sEnd= StandartString (Trim($sEnd));
$pattern ='/'.$sStart.'(.*)'.$sEnd.'/i';
preg_match_all($pattern, $sBuffer, $pole);
$nPozice = StrPos($sBuffer, $pole[1][0] ,0);
$sBuffer= SubStr($sText, $nPozice, StrLen($pole[1][0]));
return $sBuffer;
}

function StandartString ($sBuffer){
//Tato funkce odstrani diakritiku a velka pismena prevede na mala...
$sBuffer=StrTr($sBuffer,"áÁéÉíÍóÓúÚůŮýÝěĚšŠčČřŘžŽťŤďĎňŇQWERTYUIOPASDFG HJKLZXCVBNM","aaeeiioouuuuyyeessccrrzzttddnnqwertyuiopasdfghjklzxcvbnm ");
return $sBuffer;
}

?>
TrueFriend
Profil
Děkeju moc. To je teda script... moc šikovnej a kvalitní. Fakt.
pavel Prochazka.zde.cz
Profil *
Neni jeste dokonaly, ma nekolik chybycek, jak casem zjistis.....

Jeste si zmen funkci StrihaniString na:

unction StrihaniString ($sStart, $sEnd, $sText){
$sBuffer= StandartString (Trim($sText));
$sStart= StandartString (Trim($sStart));
$sEnd= StandartString (Trim($sEnd));
$pattern ='/'.$sStart.'(.*)'.$sEnd.'/i';
preg_match_all($pattern, $sBuffer, $pole);
$sBuffer= SubStr(Trim($sText), StrPos($sBuffer, $pole[1][0] ,0), StrLen($pole[1][0]));
return $sBuffer;
}

Tak to bude lepsi....
TrueFriend
Profil
dobře, máme teď script:
<?php
$fd = fopen ("soubor.txt", "r");
while (!feof ($fd)) {
$buffer .= fgets($fd, 4096);
}
fclose ($fd);

$sText = $buffer;
$sStart = 'ÚHOŘ';
$sEnd = 'PÍSKEM';

$sVysledek = StrihaniString ($sStart, $sEnd, $sText);
function StrihaniString ($sStart, $sEnd, $sText){
$sBuffer= StandartString (Trim($sText));
$sStart= StandartString (Trim($sStart));
$sEnd= StandartString (Trim($sEnd));
$pattern ='/'.$sStart.'(.*)'.$sEnd.'/i';
preg_match_all($pattern, $sBuffer, $pole);
$sBuffer= SubStr(Trim($sText), StrPos($sBuffer, $pole[1][0] ,0), StrLen($pole[1][0]));
return $sBuffer;
}

function StandartString ($sBuffer){
//Tato funkce odstrani diakritiku a velka pismena prevede na mala...
$sBuffer=StrTr($sBuffer,"áÁéÉíÍóÓúÚůŮýÝěĚšŠčČřŘžŽťŤďĎňŇQWERTYUIOPASDFG HJKLZXCVBNM","aaeeiioouuuuyyeessccrrzzttddnnqwertyuiopasdfghjklzxcvbnm ");
return $sBuffer;
}

echo $sVysledek;
?>

Ale co když je soubor.txt víceřádkový? Pak to nepřečte.
TrueFriend
Profil
tak jsem si teď trošku pohrál s funkcemi, začal jsem úplně od začátku a výsledek je stejný.
Umí to i víceřádkový soubor, i češtinu umí:

$mujcil = file_get_contents("soubor.txt");
$vyhledat = preg_match("'úhoř(.*?)pískem'si", $mujcil, $vysledek);

echo $vysledek[1];
« 1 2
Toto téma je uzamčeno. Odpověď nelze zaslat.

0