zdravím, mám datový soubor, který obsahuje informace oddělené pevně daným shlukem znaků, tj např. data1 --- data2 --- data3 --- atp., nic víc v souboru není. prosím jak získám počet jednotlivých informací (tzn. kolikrát se tam data vyskytují) + jak tento počet vypišu do php stránky? ideálně jakým příkazem + jeho syntax. díky všem za případnou pomoc.
Koukám do php manuálu:
1. soubor načíst do proměnné - string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset]]])
2. výše uvedené explode - array explode ( string separator, string string [, int limit])
které ti obsah natlačí do pole. Pak fce int count ( mixed var [, int mode]) vrátí počet prvků pole. Vedlejší efekt je ten, že máš v jednotlivých buňkách obsah dat.
Pokud, ale obsah nepotřebuješ, tak je to poměrně nešetrné řešení ohledně použití paměti. Zvlášť když je načítaný soubor veliký. To je pak lepší udělat to ručně. To znamená otevřít soubor fopen(), číst řádky fgets() a každý řádek prověřit na přítomnost oddělovače záznamů strpos(). Pro každý nalezený výskyt zvětšit nějaké počítadlo. To není úplně triviální v případě, že se na řádku vyskytuje víc jak jeden oddělovač. Ale zas tak složité to není.
Pak je dobré po sobě soubor zavřít a v tom počítadle máš počet data. Ještě mě napadá, že je dobré ošetřit okrajové podmínky - není žádný záznam, je jenom jeden zázanm a není žádný oddělovač, na konci souboru je jenom oddělovač a nejsou tam data.
diky za nakopnuti, datovy soubor by nemel byt velky, ale stejne- bylo by resenim zaplnene pameti po vypsani poctu prvku udelat nejake "smazani" pole? tzn bud nacteny obsah zahodit nebo mu priradit jen nejake minimalni mnozstvi dat (hodnotu nula apod.)?
Po provedení skriptu se dělá úklid, takže se o to člověk nemusí moc starat. Jinak se to samozřejmě dá. Existuje fce tuším unset(). Takže unset($pole) ho zruší domrtě.
tak jsem to uspesne dal dohromady, diky za pomoc!