Zadejte hledaný výraz...

Čtení z .txt souboru

Vláďa
verified
rating uzivatele
(7 hodnocení)
30. 7. 2010 01:09:00
Zdravím všechny webtržníky.
Naléhavě Vás prosím o pomoc :(
Kdysi jsem si nechával naprogramovat jednoduchý nákupní koš v .php. Kvůli nižším provozním nárokům načítal data vždy z.txt souboru namísto databáze.
Dejme tomu:
1 //ID produktu
Produkt 1 // Název produktu
15 000 // Cena
2
Produkt 2
30 000
Potřeboval bych poradit jak mohu ošetřit, aby mi skript bral vždy data k určitému produktu. Jak si může vyhledat data třeba k produktu s ID 1?
Předem Vám moc děkuji za odpovědi, budu Vám moc vděčný
30. 7. 2010 01:09:00
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536260
killme
verified
rating uzivatele
(1 hodnocení)
30. 7. 2010 01:48:04
čau, jedno z možných řešení je nahrát soubor do pole, a pak to projít, tedy za předpokladu, že každá informace má svůj řádek, a celý to drží nějakou pravidelnost
vypadalo by to asi takhle
$file = file('tvujsoubor.txt');
function findIt($id, $arr){
for($i=0; $i
$produkt = array();
if (trim($arr) == $id){
$produkt = $arr;
$i++;
$produkt = $arr;
$i++;
$produkt = $arr;
return $produkt;
}
}
return null;
}
$produkt = findIt('2', $file));
var_dump($produkt);
30. 7. 2010 01:48:04
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536259
Petr Vacek
verified
rating uzivatele
30. 7. 2010 02:01:49
killme mě předběhl a asi s lepším řešením než je to moje. Nicméně to svoje taky ukážu:
$radky = file("cesta/k/souboru.txt");
$produkty=array();
$index = $produkt = $cena = null;
foreach($radky as $k=>$v){
$ulozeno = false;
switch($k%3){
case 0:
$index = $v;
break;
case 1:
$produkt = $v;
break;
case 2:
$cena = $v;
// ulozit do pole
$produkty = array("nazev"=>$produkt,"cena"=>$cena);
$ulozeno = true;
$index = $produkt = $cena = null;
break;
}
}
if($ulozeno == false){
// uložit pro případ, že poslední položka není komlpetní
$produkty = array("nazev"=>$produkt,"cena"=>$cena);
$ulozeno = true;
$index = $produkt = $cena = null;
}
// vypsat informace o položce s id 27
echo " produkt s id 27 se jmenuje {$produkty} a stojí {$produkty} ";
30. 7. 2010 02:01:49
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536258
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
30. 7. 2010 04:23:21
pridam svoje reseni :-)
$data = '1
Produkt 1
15 000
2
Produkt 2
30 000
3
Produkt 3
30 000
123
Produkt 123
30 000';
function find_product_by_id ( $id )
{
//tohle si udelej nejak jinak :-)
global $data;
$id = preg_quote ( $id );
if ( !preg_match ( "%(?:n|^)($id)rn(.*?)rn(.*?)%s", $data, $matches ) )
return null;
@list ( $product -> id, $product -> title, $product -> price ) = $matches;
return $product;
}
print_r ( find_product_by_id ( 1 ) );
print_r ( find_product_by_id ( 2 ) );
print_r ( find_product_by_id ( 3 ) );
jako bonus to vraci i objekt ;)
kazdopadne si to ale predelej do databaze, soubory jsou zlo :-)
30. 7. 2010 04:23:21
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536257
romulus
verified
rating uzivatele
(1 hodnocení)
30. 7. 2010 08:52:35
Nebudu tu psát konkrétní řešení, ale pokud opravdu nechceš databázi (nevím proč), tak bych si k tomu udělal ještě jeden csv soubor s indexy (ID;začáteční pozice;délka záznamu) a hlavní datový soubor pak načítal z konkrétního místa přes fseek();.
Případně dát vše do jednoho souboru, který začne indexy (budu načítat, dokud nenajdu potřebný) a přes fseek(); se posune na data.
Ale jestli máš těch položek jen pár, tak načtení do pole, nebo načtení do řetězce a prohledání regulárním výrazem stačí.
30. 7. 2010 08:52:35
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536256
Vláďa
verified
rating uzivatele
(7 hodnocení)
31. 7. 2010 00:26:02
Tak to už mám.
Díky Všem za pomoc, všechny komentáře mi moc pomohly ;)
31. 7. 2010 00:26:02
https://webtrh.cz/diskuse/cteni-z-txt-souboru#reply536255
Pro odpověď se přihlašte.
Přihlásit