« 1 2 »
Autor Zpráva
TrueFriend
Profil
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 *
to priam vola po regularnom vyraze
http://cz.php.net/manual/cs/ref.pcre.php
TrueFriend
Profil
Jak začlením do toho scriptu reg.výraz?a jaký použít?
Anonymní
Profil *
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 *
ale je to tak narychlo, napr ked budes mat v subore znak '-' tak to neprejde, to je len na ukazku (pouzita negacia)
TrueFriend
Profil
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
Opravdu nikdo prosím neporadí?
djlj
Profil
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 *
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 *
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
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
pavel Prochazka.zde.cz
Vyhazuje to chybu:

Parse error: syntax error, unexpected T_ELSE in line:
else $vystup=$pole[$i];
Anonymní
Profil *
pokial je to necakane else a zacina nim riadok tak skor by som skontroloval riadok predtym
TrueFriend
Profil
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
ale pořád to nedělá to co to má :(
Anonymní
Profil *
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
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
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 *
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 *
mne to funguje normalne s /i, skus pouzit $pattern ='/'.$start.'(.*)'.$end.'/ui';
TrueFriend
Profil
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
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
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 *
to: TrueFriend:
uz je to ok, me tam chybala ta veta ze text je ohranicen dvouma promenima...
pavel Prochazka.zde.cz
Profil *
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 *
a v promenne $sVysledek mas to co chces......
Anonymní
Profil *
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
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
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 *
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
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.

0