Autor Zpráva
LukasP
Profil *
Zdravím všechny,

řeším docela zajímavou věc.

Mám textový soubor, který obsahuje data v poli. Data jsou na několika řádcích a v pěti sloupcích, jsou oddělena pomocí $.
Každý sloupec obsahuje stejný druh dat.
Například obsaho souboru zdroj.txt:
QBGO-M2I1-KYWP-ACUS$1$1265560260$200$3$
UDZ9-OVM2-IZUU-LH4L$20$1265563800$0$1$
ZHIP-HXQV-SPAV-LRL2$1$1265563800$20$20$


Potřebuji tento soubor otevřít a načíst do pole a procházet. S tím, že tam bude podmínka, že až narazí na řádek na kterém se v prvním poli bude nacházet určitý řetězec, který mám uložený v proměnné $ahoj (například $ahoj = "ZHIP-HXQV-SPAV-LRL2").
Tak aby v posledním sloupci toho řádku to číslo zmenšil o jedna.

Tedy tento řetězec najde na posledním řádku a číslo 20 na konci toho řádku změní na 19 a uloží.

Mám toto:
<?php
 $ahoj = "ZHIP-HXQV-SPAV-LRL2";
 $kurzy =  file("zdroj.txt");
 foreach ($kurzy as $v) {
     $h = explode("$", $v);
     if ($h[0] == $ahoj) {$h[4] = $h[4]-1;};                                                 
    }
?>


Funguje to sice dobře, ale do souboru to nezapíše. Pokud soubor otevřu pomocí FOpen tak to hlásí chybu ve foreach (Invalid argument supplied for foreach).
tiso
Profil
LukasP: funkcia file() vracia pole z jednotlivých riadkov súboru, fread() vracia string, ešte si to musíš nasekať do poľa pomocou:
$lines=explode("\n", $string);
fajzen
Profil
LukasP:
Funguje to sice dobře, ale do souboru to nezapíše
samozrejme, že nie, keď tam nikde nemáš príkaz na zápis do súboru... pracuješ len so skopírovanými dátami zo súboru do premenných, takže zmena v premenných sa neprejaví automaticky v súbore...
inak, nejak sa mi nechce veriť, že hento ti funguje dobre ;)
<?php
$subor = 'zdroj.txt';
$hladany = "ZHIP-HXQV-SPAV-LRL2";

$kurzy =  file($subor);

for($i = 0; $i < count($kurzy); $i++) {
  $udaje = explode('$', $kurzy[$i]);

  if ($udaje[0] == $hladany) {
    $udaje[4]--;
    $kurzy[$i] = implode('$', $udaje);
    break; // iba ak je zaručené, že ten hľadaný reťazec sa v súbore vyskytuje iba raz, inak tento riadok zmazať
  }
}

$fh = fopen($subor, 'w');
fwrite($fh, implode("\r\n", $kurzy));
fclose($fh);
?>
LukasP
Profil *
fajzen:

Tím, že to funguje jsem myslel, že v té proměnné mám pak 19 místo 20. Jinak ten tvůj kód mi hlásí chybu na řádku 17.
fajzen
Profil
LukasP:
akú chybu?
LukasP
Profil *
Omlouvám se, už je to v pořádku. Akorát mě to mezi řádky přidává prázdné řádky.
fajzen
Profil
LukasP:
aha, pardon, som si neuvedomil, že funkcia file() tam tie konce riadkov nechá... zmeň 18. riadok na
fwrite($fh, implode('', $kurzy));
LukasP
Profil *
Jasné také už mě to napadlo. Děkuju moc za pomoc.

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: