Autor Zpráva
Skogen
Profil *
Ahoj,

načítám samotné číslo z textového souboru a chci s ním dál pracovat jako s číslem uloženým v proměnné $limit, ale:

- i když jde o samotné číslo, je proměnná typu string
- když použiju fci int nebo intval, bude to sice integer, ale s nulovou hodnotou, jako by se před číslem nacházel nějaký znak, kvůli kterému se vrací 0...

Zabralo mi až krkolomné ukládání čísla se znaky před číslicí, oříznutí řetězce a následně konverze string na integer:

$limit = file_get_contents('./files/limit/limit.txt');
$limit = substr($limit, -2);
$limit = (int)$limit;

ale určitě to jde i nějak jednodušeji, jen na to ne a ne přijít...
Tori
Profil
$limit = (int) preg_replace('~\D+~', '', (string) file_get_contents('./files/limit/limit.txt')); ?
edit: Doplnila jsem přetypování, přeci jen file_get_contents může vracet i FALSE. Stejně by asi bylo lepší načtení souboru dát mimo a ověřovat návratovou hodnotu. Tohle byl jen naznačený způsob.
PostCC
Profil
Skogen:
Protože v tom souboru je číslo uloženo pravděpodobně i se znaky konce řádku (hexa "0A0D"), čemuž by odpovídal i ten workaround s odříznutím posledních dvou znaků. Bohatě postačí odříznout prázdné znaky, případně ještě zaokrouhlit dolů, ať máme jistotu, že je to integer, tzn.:

$limit = Floor(Trim(File_Get_Contents("./files/limit/limit.txt")));

Nicméně řešení Tori je ultimativní, zabrání výskytu jakýchkoli jiných nečíselných znaků. Upozorňuji, že pokud bys se z jakéhokoli důvodu do toho řetězce dostal nějaký nenumerický znak, např. "1e5", bude výsledkem u Tori "15", v mém řešení "100000".
Skogen
Profil *
Děkuji za řešení i vysvětlení.

PostCC:

trim jsem zkoušel, vracel se integer s 0, floor teď vrací double s 0...
PostCC
Profil
Skogen:
OK, pak to zřejmě bude nějaký jiný prázdný znak, např. sekvence "C2A0" je v UTF-8 tzv. "tvrdá mezera" a TRIM ji rovněž nedokáže odstranit bez dodatečných parametrů. Pak zřejmě vyhoví Toriino řešení.
Skogen
Profil *
Ještě jednou díky.

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:

0