Autor | Zpráva | ||
---|---|---|---|
LukasP Profil * |
#1 · Zasláno: 31. 1. 2010, 18:38:53
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 |
#2 · Zasláno: 31. 1. 2010, 18:49:03
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 |
#3 · Zasláno: 31. 1. 2010, 19:04:07 · Upravil/a: fajzen
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 * |
#4 · Zasláno: 31. 1. 2010, 19:12:00
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 |
#5 · Zasláno: 31. 1. 2010, 19:20:13
LukasP:
akú chybu? |
||
LukasP Profil * |
#6 · Zasláno: 31. 1. 2010, 19:21:02
Omlouvám se, už je to v pořádku. Akorát mě to mezi řádky přidává prázdné řádky.
|
||
fajzen Profil |
#7 · Zasláno: 31. 1. 2010, 19:24:20
LukasP:
aha, pardon, som si neuvedomil, že funkcia file() tam tie konce riadkov nechá... zmeň 18. riadok na fwrite($fh, implode('', $kurzy)); |
||
LukasP Profil * |
#8 · Zasláno: 31. 1. 2010, 19:24:48
Jasné také už mě to napadlo. Děkuju moc za pomoc.
|
||
Časová prodleva: 14 let
|
0