Portál AbcLinuxu, 12. května 2025 19:21
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
sed -e '1,2 d' -e 's/"//g' -e 's/,/|/g' "$PATHDATA/GeoLiteCity-Location.csv" > $TMP sqlite3 $IPDatabase ".import $TMP Location" sqlite3 $IPDatabase 'CREATE INDEX "main" on Location (locId ASC);'Ta utilitka slouží pro vyhledání souřadnic pro IP, tohle je jen kousek z kódu. Podstatné je, že csv soubor je upraven ořezáním prvních dvou řádků a nahrazením oddělovače na typ jaký používá sqlite3 nativně (svislítko). Takto upravený soubor s daty je naimportován do příslušné tabulky. Poslední řádek pak po importu vytvoří index. A vůbec, v dokumentaci se můžete dočíst spoustu zajímavých věcí a tipů.
#include <stdio.h> int main(int argc, char** argv) { int i, n; char s[20]; for (i=0; i<30000000; i++) { sprintf(s, "%d", i); sscanf(s, "%d", &n); } return 0; } time ./print real 0m25.825s user 0m25.680s sys 0m0.010sa druhy:
#include <string.h> int main(int argc, char** argv) { int i, n, b; for (i=0; i<30000000; i++) { memcpy(&b, &i, sizeof(i)); memcpy(&n, &b, sizeof(i)); } return 0; } time ./write real 0m0.305s user 0m0.300s sys 0m0.000s(user time druheho programu rastie linearne s hornou hranicou cyklu, takze cas na vytvorenie procesu a podobne mozeme zanedbat.) Isteze, vypisovanie cisel do suboru nie je iba samotna koverzia, ale aj cinnosti, ktore treba spravit pri oboch sposoboch vypisu a nacitania, takze celkovy pomer nebude tak vysoky. Ale o "nenarocnosti" to hovori dost. Zaver: vzhladom na jednorazove sekvencne zapisovanie/nacitavanie dat do/zo suborov, nic lepsie ako binarny zapis do suboru nenajdes.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.