Autor | Zpráva | ||
---|---|---|---|
TrueFriend Profil |
#1 · Zasláno: 19. 8. 2006, 00:12:58
Jak oříznout nějaký výběr textu?
Mám třeba soubor.txt s obsahem: ---zacatek souboru--- Karel má koláč, který byl zkažený. Měl z toho později divný pocit. ---konec souboru--- a chci aby PHP tento soubor otevřelo a jako výtup na echo poslal jen výběr (ořez) textu. Hranice toho výběru textu aby byly podle uživatele definovány podel znaků. Výstup na echo by pak měl vypadat takto: --- koláč, který --- Něco málo jsem naprogramoval, ale to umí oříznout jen hlavičky HTML souborů. Tady je kód... -------- $pole = file ("soubor.txt"); $pocet_radku = count ($pole); for ($i=1; $i<$pocet_radku-1;$i++) { if (trim ($pole[$i])=="<head>") $stav=1; if (trim ($pole[$i])=="</head>") $stav=0; if ($stav==1) $vystup=""; else $vystup=$pole[$i]; echo ($vystup); } ------------ Pokud se najde dobrá duše, která poradí tak jak mám upravit tento kód, aby mi dělal to co chci? Pokud je nějaká ještě lepší duše, lze udělat nějak, že to určitý text jen nevybere, ale třeba jen vyjme? v PHP jsem začátečník, tak mne prosím nekamenujte :) |
||
Anonymní Profil * |
#2 · Zasláno: 19. 8. 2006, 01:13:18
to priam vola po regularnom vyraze
http://cz.php.net/manual/cs/ref.pcre.php |
||
TrueFriend Profil |
#3 · Zasláno: 19. 8. 2006, 01:23:19
Jak začlením do toho scriptu reg.výraz?a jaký použít?
|
||
Anonymní Profil * |
#4 · Zasláno: 19. 8. 2006, 01:43:33
tu je tvoj priklad
$data = '---zacatek souboru--- Karel má koláč, který byl zkažený. Měl z toho později divný pocit. ---konec souboru---'; $pattern = '/---zacatek\ssouboru---\s+([^\-]+)\s+---konec\ssouboru---/m'; preg_match($pattern, $data, $matches); print_r($matches); vnutro suboru mas ulozene v $matches[1]; |
||
Anonymní Profil * |
#5 · Zasláno: 19. 8. 2006, 01:45:14
ale je to tak narychlo, napr ked budes mat v subore znak '-' tak to neprejde, to je len na ukazku (pouzita negacia)
|
||
TrueFriend Profil |
#6 · Zasláno: 19. 8. 2006, 02:09:51
nefunguje. vypisuje to na výstupu jen:
Array ( [0] => zacatek souboru Karel má koláč, který byl zkažený. Měl z toho později divný pocit. konec souboru [1] => Karel má koláč, který byl zkažený. Měl z toho později divný pocit. ) Samozřejmě jsem odstranil znaky "-". Co se týká toho souboru, tak bez tohoto: ---zacatek souboru--- ---konec souboru--- To jsem sem zanesl jen proto, že nelze nijak označit text s kterým se pracuje. Jinde je na to funkce "code", tady ne... |
||
TrueFriend Profil |
#7 · Zasláno: 19. 8. 2006, 14:30:28
Opravdu nikdo prosím neporadí?
|
||
djlj Profil |
#8 · Zasláno: 19. 8. 2006, 14:36:16
TrueFriend
Zjistil bych si, kolikátým znakem v souboru ta část, kterou potřebuješ, začíná a končí (strpos) a pak to vysekl (substr). |
||
pavel Prochazka.zde.cz Profil * |
#9 · Zasláno: 19. 8. 2006, 15:38:21
podle ceho se urcuje pozadovana cast textu? Je to podle carky? Pokud ano, tak bych nacetl jeden radek, zkontroloval zda se v nem nachazi carka, pokud ne, tak pokracuji dal. Pokud ano, tak najdu kde se naleza carka a slovo pred a za carkou vytisku....
To je jen jak by mel program fungovat.... |
||
pavel Prochazka.zde.cz Profil * |
#10 · Zasláno: 19. 8. 2006, 15:41:13
co se tyce toho kodu, tak takto je to lepsi:
$pole = file ("soubor.txt"); $pocet_radku = count ($pole); for ($i=1; $i<$pocet_radku-1;$i++) { trim ($pole[$i])=="</head>"; if (trim ($pole[$i])=="<head>") $vystup=""; ; else $vystup=$pole[$i]; echo ($vystup); } |
||
TrueFriend Profil |
#11 · Zasláno: 19. 8. 2006, 16:17:30
Požadovaná část textu je podle toho jaký se zadá.
Samozřejmě, předpokladem je, aby se těchto prvků v daném řetězci nevyskytovalo více. Ve scriptu, který jsem dal k dispozici je požadován řetězec mezi hlavičkou HEAD standartního HTML kódu. Script by měl takovýto HTML soubor načíst, ale vypsat pomocí echo jen text který je definován (jeho definované rozmezí). V tomto případě vypíše jen text, který se nalézá mezi tagy "HEAD"... Věta, kterou jsem dal jako příklad byla jen pro zjednodušení. Omlouvám se, zdali to spíše ztížilo situaci. Původně jsem chtěl řešit toto opomocí funkcí ltrim a rtrim, ale u nich je nevýhoda, že je nutno zadat, co se má z daného řetězce odstranit... avšak já požaduju opak - Označit začátek a konec části řetězce a ten aby ho ponechalo... ostatní části řetězce aby byly odstraněny. Příklad 2: Budu mít základní řetězec v souboru soubor.txt: Pískový úhoř plul tekutým horkým pískem na poušti. A ten budu chtít přes PHP profiltrovat tak, aby po definování hranic označeného řetězce například. ÚHOŘ až po slovo PÍSKEM a výstup na echo by poté jen mezi těmi definovanými hranicemi řetězce: PLUL TEKUTÝM HORKÝM Snad už je to jasnější :) Omlouvám se za nejasnosti |
||
TrueFriend Profil |
#12 · Zasláno: 19. 8. 2006, 16:21:41
pavel Prochazka.zde.cz
Vyhazuje to chybu: Parse error: syntax error, unexpected T_ELSE in line: else $vystup=$pole[$i]; |
||
Anonymní Profil * |
#13 · Zasláno: 19. 8. 2006, 16:24:10
pokial je to necakane else a zacina nim riadok tak skor by som skontroloval riadok predtym
|
||
TrueFriend Profil |
#14 · Zasláno: 19. 8. 2006, 16:28:40 · Upravil/a: TrueFriend
díky, už jsem na to přišel.
Tady je ten kód opravený: $pole = file ("soubor.txt"); $pocet_radku = count ($pole); for ($i=1; $i<$pocet_radku-1;$i++) { trim ($pole[$i])=="</head>"; if (trim ($pole[$i])=="<head>") $vystup=""; else $vystup=$pole[$i]; echo ($vystup); } |
||
TrueFriend Profil |
#15 · Zasláno: 19. 8. 2006, 16:34:19
ale pořád to nedělá to co to má :(
|
||
Anonymní Profil * |
#16 · Zasláno: 19. 8. 2006, 16:37:39
skus dat to do if($cond) {} else {}
mimochodom tu mas dalsiu regexp odomna ;) $text = 'Pískový úhoř plul tekutým horkým pískem na poušti.'; $start = 'ÚHOŘ'; $end = 'PÍSKEM'; $pattern ='/'.$start.'(.*)'.$end.'/i'; preg_match($pattern, $text, $matches); print_r($matches); text vratane toho UHORA a PISKU mas v 0 a to co je medzi mas v 1, co pouzijes sa rozhodni sam |
||
TrueFriend Profil |
#17 · Zasláno: 19. 8. 2006, 16:52:26
ten poslední příspěvek vypisuje na stránku jen tohle:
Array ( ) sice vím že to znamená pole, ale nevím jak se toho zbavit opravou toho kódu. |
||
TrueFriend Profil |
#18 · Zasláno: 19. 8. 2006, 16:53:59
tak jsem z toho vyházel diakritiku a vypsalo to na stránku tohle:
Array ( [0] => uhor plul tekutym horkym piskem [1] => plul tekutym horkym ) tak teď jsem úplně namydlenej... |
||
pavel Prochazka.zde.cz Profil * |
#19 · Zasláno: 19. 8. 2006, 17:01:37
Ale porad me unika to podstatne, Jak se difinovane to vybirani konkretnich slov? podle toho se potom musi napsat program. Ale zatim jsem to nejak nepochopil podle ceho se urcuji ty spatvna (zadana slova). Az budem znat klic vyberu, potom se da bavit o algoritmu a posleze o konkretnim resen.....
|
||
Anonymní Profil * |
#20 · Zasláno: 19. 8. 2006, 17:07:14
mne to funguje normalne s /i, skus pouzit $pattern ='/'.$start.'(.*)'.$end.'/ui';
|
||
TrueFriend Profil |
#21 · Zasláno: 19. 8. 2006, 17:11:49
pavel Prochazka.zde.cz
Jako definování ohraničení vybraného řetězce stačí zadaná proměnná: $start = 'uhor'; $end = 'piskem'; Pro lepsi predstavu to napisu na prikladu který bude vypadat jako osa (představ si, že tento text je natištěn na papírovém proužku papíru): Piskovy uhor*** plul tekutym horkym ***piskem na pousti. *** znamenají jako by jsi vzal do ruky pomyslně nůžky a přestříhl na dvou místech tu větu (zbyde Ti tak jen ten text uprostřed). Původní text: Piskovy uhor plul tekutym horkym piskem na pousti. se po rozsříhání nůžkami (po zpracování textu PHP scriptem) změní na: plul tekutym horkym Myslím že snad to je už maxijasné :) |
||
TrueFriend Profil |
#22 · Zasláno: 19. 8. 2006, 17:14:38 · Upravil/a: TrueFriend
Anonym
možná je to verzí PHP. Mám PHP5 na Linuxu Ani s tím změněným parametrem nic.. Array ( [0] => uhor plul tekutym horkym piskem [1] => plul tekutym horkym ) |
||
TrueFriend Profil |
#23 · Zasláno: 19. 8. 2006, 17:19:48
Anonymní
Co tak už o problémech s polem vím, tak by bylo potřeba do toho scriptu začlenit nějak $pole[$i] a jim podobné. Taky mi to vyhazovalo tuhle chybu, když jsem dělal ten svůj script, co jsem uvedl na začátku. Pak jsem ten script předělal a včlenil jsem do něj $pole[$i] a už to problémy nedělalo. Otázka je jak to včlenit do toho scriptu $text = 'Piskovy uhor plul tekutym horkym piskem na pousti.'; $start = 'uhor'; $end = 'piskem'; $pattern ='/'.$start.'(.*)'.$end.'/i'; preg_match($pattern, $text, $matches); print_r($matches); |
||
pavel Prochazka.zde.cz Profil * |
#24 · Zasláno: 19. 8. 2006, 17:26:32
to: TrueFriend:
uz je to ok, me tam chybala ta veta ze text je ohranicen dvouma promenima... |
||
pavel Prochazka.zde.cz Profil * |
#25 · Zasláno: 19. 8. 2006, 17:41:04
tak zde mas funkcni kod:
<?php $sText = 'Pískový úhoř plul tekutým horkým pískem na poušti.'; $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; } ?> |
||
pavel Prochazka.zde.cz Profil * |
#26 · Zasláno: 19. 8. 2006, 17:41:58
a v promenne $sVysledek mas to co chces......
|
||
Anonymní Profil * |
#27 · Zasláno: 19. 8. 2006, 17:50:56
nj ja mam php5 taktiez ale na windowsoch, zrejme je vysledny text kodovany na kazdej platforme inak, co je asi dost mozne lebo windows pouziva cp1250 a linux utf8 sa mi zda
|
||
TrueFriend Profil |
#28 · Zasláno: 19. 8. 2006, 17:59:52
pavel Prochazka.zde.cz
Promiň, zkouším to teď na dvou platformách. Win i Linux.. oba PHP5. Vyhazuje to ale jen prázdnou stránku... koukám na ten kód, a ten je myslím v pořádku... Zkoušel jsem za ten kód tedy dosadit jen: echo $sVysledek; nebo i: print($sVysledek); ale nic, jen to vyhodilo prázdnou stránku. |
||
TrueFriend Profil |
#29 · Zasláno: 19. 8. 2006, 18:01:14
Anonymní
Zkoušel jsem Tvůj kód už na obou platformách. Win32 i Linux... stejný výsledek. Nemůže to být třeba chyba u mě nějakým špatným nastavením php.ini ? |
||
Anonymní Profil * |
#30 · Zasláno: 19. 8. 2006, 18:11:41
chyba je vtom ze ked si pastnes cast:
$sBuffer=StrTr($sBuffer,"áÁéÉíÍóÓúÚůŮýÝěĚšŠčČřŘžŽťŤďĎňŇQWERTYUIOPASDFG HJKLZXCVBNM","aaeeiioouuuuyyeessccrrzzttddnnqwertyuiopasdfghjklzxcvbnm "); tak mas za znakom G medzeru a tu treba odstranit inak premeni kazdu medzeru na znak 'h'; medzera tam nema co robit |
||
Téma pokračuje na další straně.
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0