Autor | Zpráva | ||
---|---|---|---|
Rogue. Profil * |
#1 · Zasláno: 13. 6. 2008, 19:30:39
Ahoj
mohl by mi někdo poradit jak udělat takový výběr? Mám řekněme 100 souborů.txt v každém znich je číslo (je to počet zobrazení) a já bych potřeboval nějakým šikovným scriptem přečíst všechny soubory a vypsat ten z největší hodnotou(může jich být klidně i 5 z největší hodnotou). Nepomohl by mi někdo stím? Stačí mi i princip jak to udělat pak už to snad zvládnu. díky |
||
nightfish Profil |
#2 · Zasláno: 13. 6. 2008, 19:55:06
princip:
- načítat postupně soubory z adresáře a hodnoty z nich - ukládat načtené hodnoty do pole - klíč = název souboru, hodnota = hodnota ze souboru - seřadit pomocí ksort() - vypsat |
||
yFang Profil |
#3 · Zasláno: 13. 6. 2008, 19:56:18
Rogue.
Otázka je, jak se ty soubory jmenují, pokud mají všechny stejný název + nějaké číslo (třeba 1 - 100), tak by to nemusel být problém. |
||
Rogue. Profil * |
#4 · Zasláno: 13. 6. 2008, 20:29:17
No soubory se jmenují stejně (1.txt, 2.txt, 3.txt, .........100.txt)
|
||
kletely Profil |
#5 · Zasláno: 13. 6. 2008, 20:31:18
Rogue.
Tak je to potom ešte jednoduchšie lebo môžeš použiť cyklus. |
||
Joker Profil |
#6 · Zasláno: 13. 6. 2008, 20:36:01
Něco takovéhoto:
- maximum = 0 - $vybrane = array(); - přes všechny soubory: - - načti číslo ze souboru - - pokud číslo > maximum: $vybrane = array(název-souboru) - - pokud číslo == maximum: $vybrane[] = název-souboru; Na konci algoritmu by v poli $vybrane měl být soubory nebo soubory obsahující maximum. |
||
Joker Profil |
#7 · Zasláno: 13. 6. 2008, 20:37:30
kletely
Tak je to potom ešte jednoduchšie lebo môžeš použiť cyklus. No neumím si dost dobře představit procházení 100 soubory bez cyklu, to by bylo na cvokárnu :o))) |
||
Rogue. Profil * |
#8 · Zasláno: 13. 6. 2008, 20:56:26
Zjistil jsem ze to asi sam nezvladnu jak jsem cekal. Nebyl by nekdo ochotný napsat základ toho scriptu že bych si to dodělal ale nevím jak začít. Díky
|
||
yFang Profil |
#9 · Zasláno: 13. 6. 2008, 21:47:51
Rogue.
Zhruba nějak takhle: for($i=0;$i<101;$i++) { $soubor = $i.".txt"; $handle = fopen($soubor, "r"); $obsah = fread($handle, filesize($soubor)); // sem si doplň jak to zpracuješ, teď se mi to nechce vymýšlet fclose($handle); } |
||
imploder Profil |
#10 · Zasláno: 13. 6. 2008, 22:04:14
$adr = opendir("./adresar/"); // v něm jsou ty soubory $nejvetsi = 0; while ($s = readdir($adr)) { // získáváme po jednom názvy souborů v adresáři $n = (int) $substr($s, 0, -4); // oddělíme .txt a převedeme na číslo if ($n > $nejvetsi) $nejvetsi = $n; // když je větší tak aktualizujeme největší číslo } closedir($adr); fpassthru("./adresar/".((string) $nejvetsi).".txt"); // vypíšeme soubor |
||
Rogue. Profil * |
#11 · Zasláno: 13. 6. 2008, 22:17:21
Pro imploder:
Nějáká chyba na řádku 5 mam tam i <?php takže řádek 4 (Fatal error: Function name must be a string) |
||
imploder Profil |
#12 · Zasláno: 13. 6. 2008, 22:34:07
Nějak tomu nechutnalo přetypování přímo ve výrazu typem v závorkách (netuším proč, nevíte?), tak jsem tam dal místo toho settype(). Taky jsem zapomněl, že pro fpassthru() se musí soubor otevřít. Teď už by to mělo fungovat, zkoušel jsem to.
$adr = opendir("./adresar/"); // v něm jsou ty soubory $nejvetsi = 0; while ($s = readdir($adr)) { // získáváme po jednom názvy souborů v adresáři $n = substr($s, 0, -4); // oddělíme .txt settype($n, "integer"); // převedeme na číslo if ($n > $nejvetsi) $nejvetsi = $n; // když je větší tak aktualizujeme největší číslo } closedir($adr); fpassthru(fopen("./adresar/".((string) $nejvetsi).".txt", "r")); // vypíšeme soubor |
||
Rogue. Profil * |
#13 · Zasláno: 13. 6. 2008, 22:46:14
Děkuji už to opravdu funguje.
|
||
Časová prodleva: 16 let
|
0