Autor Zpráva
HomerJay
Profil
Nazdar :) Potreboval by som spraviť vyhľadávanie, ktoré by hľadalo frázy v jednom súbore - išlo by o nejaký povedzme .txt súbor, texty by boli zobrazené pod sebou, asi takto:

jeden text
druhé slovo
tretí text


a ak užívateľ zadá do vyhľadávania slovo "text", nech mu to nájde práve tieto riadky -
jeden text
tretí text


Ako spraviť formulár vyhľadávania alebo tento .txt súbor viem, potrebujem však (PHP) funkciu, ktorá mi to vyhľadávanie zaistí. MySQL ani Google search využívať nechcem, vďaka :)
Mastodont
Profil
Schematicky:

$pole = file( název souboru );
$co_hledam = "XY";
$vystup = Array();

foreach ($pole as $hodnota) {
   if ( strpos($hodnota, $co_hledam) !== false) {
       $vystup[] = $hodnota;
   }
}
print_r($vystup);
HomerJay
Profil
Vďaka, presne toto som mal namysli ;)
Ešte mám otázku - ako to urobiť podľa riadku? Teda nech mi nájde povedzme riadok 54.
A rovnako tak - nech mi v tomto vyhľadávaní povie, ktorý riadok to je. Vďaka :D

Mimochodom, urobil som si príklad. Súbor tr.txt obsahuje tieto riadky:
trapas jedna
netrapas dva
neviemco tri
trapas styri


Použil som kód:

$pole = file("tr.txt");
	$co_hledam = "trapas";
	$vystup = Array();

	foreach ($pole as $hodnota) {
	   if (strpos($hodnota, $co_hledam) !== false) 
	   {
	       $vystup[] = $hodnota;
	   }
	}
	print_r($vystup);


A vypíše mi ako text toto:

Array ( [0] => trapas jedna [1] => netrapas dva [2] => trapas styri )

Ako to využijem? Potrebujem to len vypísať pod sebou ako výsledky, to je všetko.
dan55
Profil
$pole = file("tr.txt");
    $co_hledam = "trapas";
    $vystup = Array();

    foreach ($pole as $hodnota) {
       if (strpos($hodnota, $co_hledam) !== false) 
       {
           echo $hodnota."<br>";
       }
    }
    ;
Nox
Profil
Podle očekávané náročnosti/velikosti by pak byla optimalizace brát jen po řádku, aby se nemuselo celé napchat do pole a pak zas zahodit
HomerJay
Profil
Mastodont, dan55 - vďaka, ešte sa znovu pýtam, ako zistím číslo daného riadku?
echo $hodnota vypíše nájdený súbor, ešte potrebujem zistiť, na ktorom riadku sa nachádza - echo $hodnota.$riadok;, ako to mám zistiť? Je to možné cez PHP? Vďaka.
panther
Profil
HomerJay:
když nic jiného, můžeš si vytvořit proměnnou, kterou vždy na konci cyklu zvýšíš o jedna - tím dostaneš číslo řádku.
HomerJay
Profil
Ja len... či tu bude fungovať. Keď je v súbore:
este nic
trapas jedna
netrapas dva
neviemco tri
trapas styri


Dám vyhľadať "trapas", nájde mi
trapas jedna
netrapas dva
trapas styri


A použijem premennú ako si povedal, bude to brať "trapas jedna" ako riadok prvý, aj keď prvý riadok bol pôvodne este nic. Nie?
Mastodont
Profil
Číslo řádku je v $pole, jen to chce upravit cyklus.

foreach ($pole as $radek => $hodnota)
  echo $radek +1;
  ..
roberta
Profil
HomerJay:
A použijem premennú ako si povedal, bude to brať "trapas jedna" ako riadok prvý, aj keď prvý riadok bol pôvodne este nic. Nie?

keď tú premennú budeš inkrementovať aj vypisovať v if, tak áno.
ale keď ju budeš inkrementovať vo foreach a vypisovať v if, tak dostaneš číslo riadku v súbore.
HomerJay
Profil
Mastodont:
Vďaka ;)
__construct
Profil
Číslo riadku sa dá zistiť aj tým že budeš počítať \n (alebo \r\n - podľa toho v čom to ukladáš)
HomerJay
Profil
Ukladám s \n.
Hlavne teraz potrebujem využiť tie riadky, ako mám teraz vyhľadať v súbore daný riadok? Povedzme že ide o iný súbor a chcem v ňom vyhľadať riadky, ktoré som teraz zistil - scriptom ktorý ste mi poradili.

Niečo ako
foreach($pole as $radek => $hodnota) 
	{
		if(strpos($hodnota, $co_hledam) !== false) 
       	{
       		$radek++;
       		foreach($pole2 as $radek2) 
			{
				$radek2++;
				if($radek2 == $radek)
				{
           			echo '<a href="">'.$hodnota."</a><br>";
 				}
 			}
       	}
	}

Akurát to asi určite nefunguje :D
Lilly
Profil *
A ako to iste urobim v HTML?
HomerJay
Profil
Neurobíš. Musíš použiť PHP.
DoubleThink
Profil *
Drobná poznámka - není důvod načíst celý soubor do paměti, když v něm pracuješ v samostatných řádcích. Správný postup je nebýt líný a otevřít soubor klasickým fopen a pak jej cyklicky číst po řádcích funkcí fgets.
HomerJay
Profil
Presne tak som to potom začal robiť, topic je rok starý.

... dokelu jak ten čas letí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0