Autor Zpráva
Rogue.
Profil *
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
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
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 *
No soubory se jmenují stejně (1.txt, 2.txt, 3.txt, .........100.txt)
kletely
Profil
Rogue.
Tak je to potom ešte jednoduchšie lebo môžeš použiť cyklus.
Joker
Profil
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
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 *
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
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
$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 *
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
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 *
Děkuji už to opravdu funguje.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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