IMPORT_CSV

IMPORT_CSV

Akcia IMPORT_CSV


Funkcia

Import stĺpca alebo celej štruktúry z CSV súboru.

Deklarácia

IMPORT_CSV destStruct, delimiter, fName, timeZone, retCodeIdent_Int[, timeMaskIdent [, lineFrom, lineTo]][TIME] [UTF8 | ENCODING "@APP_DEFAULT@"] [COLMAP _colMap]

 

alebo

 

IMPORT_CSV destStruct, delimiter, handle, timeZone, retCodeIdent_Int, [timeMaskIdent], numLines [TIME] [COLMAP _colMap]

Parametre

destStruct

in

Identifikátor stĺpca alebo identifikátor celej lokálnej premennej typu Record.

delimiter

in

Identifikátor typu Text - oddeľovač v CSV súbore.

fName

in

Meno súboru aj s príponou.

timeZone

in

Parameter typu Text, Int alebo Bool - určuje ako budú interpretované časové značky.

timeMaskIdent

in

Identifikátor typu Text - maska pre čítanie hodnoty typu Absolútny čas.

retCodeIdent_Int

out

Návratová hodnota typu Int - úspešnosť akcie.

lineFrom

in

Parameter typu Int - počiatočný riadok.

lineTo

in

Parameter typu Int - koncový riadok.

handle

in

Parameter typu Int - hodnota, ktorú vrátila funkcia FIO_OpenRead.

numLines

in

Parameter typu Int - maximálny počet čítaných riadkov.

TIME

in

Kľúčové slovo.

UTF8

in

Kľúčové slovo.

ENCODING

in

Kľúčové slovo, za ním nasleduje názov kódovania súboru v textovom tvare. Zoznam podporovaných kódovaní v ESL.

COLMAP

in

Kľúčové slovo, za ním nasleduje identifikátor typu TEXT - _colMap.

_colMap

in

Identifikátor typu TEXT. Obsahuje názvy stĺpcov štruktúry, do ktorých sa budú vkladať dáta z csv súboru.

Návratový kód

Hodnota parametra retCodeIdent_Int - pozri tabuľku chybových stavov.

Popis

Akcia číta súbor formátu CSV. Meno súboru je dané hodnotou parametra fName. Oddeľovač položiek v CSV súbore je daný hodnotou parametra delimiter. Súbor môže používať riadkovanie znakmi LF (Unix formát), CR (Mac formát) alebo CR LF (Dos formát).
Úspešnosť operácie je indikovaná výstupným parametrom retCodeIdent_Int. Hodnota 0 znamená úspešný import, hodnota rôzna od 0 chybu.
V závislosti od parametra destStruct akcia importuje:

  • celú štruktúru - parameter je celá lokálna štruktúra,

  • stĺpec štruktúry - parameter je odkaz na stĺpec štruktúry.

Formát CSV súboru je popísaný pri akcii EXPORT_CSV.

Pokiaľ nie je použitý identifikátor timeMaskIdent, v položkách s absolútnym časom sa očakáva formát "dd.mm.rrrr hh:mi:ss". Ak je použitý, import času prebieha podľa zadanej masky. V prípade že chýba hh, mi alebo ss, tieto sú dopĺňané automaticky 0.
Pri importe reálnych čísel je ako oddeľovač desatinných miest akceptovaný znak "." (bodka) aj "," (čiarka).
Pri importe celých a reálnych čísel z CSV súboru je ako oddeľovač tisícov akceptovaný znak medzera.
Ak je hodnota parametra timeMaskIdent "" (prázdna maska), konverzia absolútneho času a reálnych hodnôt prebieha podľa nastavenia v Regional and Language Options aktuálneho užívateľa na systémoch Windows. Pre iné operačné systémy je prázdna maska automaticky nahradená hodnotou "dd.mm.rrrr hh:mi:ss".
V prípade konvertovania položky na typ Absolútny čas a zároveň je položka prázdny reťazec, akcia interpretuje takúto položku ako neplatnú hodnotu.

Ak je použité kľúčové slovo TIME, predpokladá sa, že v CSV súbore sú zapísané aj časy vzniku hodnôt (CSV súbor má dvojnásobný počet stĺpcov).
Ak je použité kľúčové slovo UTF8, akcia číta daný textový súbor a predpokladá, že je kódovaný vo formáte UTF-8. Preto pri jeho čítaní vykonáva konverziu UTF-8 -> WIN1250.

V prípade potreby je lokálnej premennej destStruct zmenený rozmer. Tento je daný počtom riadkov v CSV súbore.

Parameter timeZone určuje ako majú byť interpretované časové hodnoty. V prípade, že je zadaný prázdny text, sú časy interpretované ako lokálne časy. V prípade zadania názvu časovej zóny (napr. "Europe/London"), budú časy interpretované ako lokálne časy pre zadanú časovú zónu. V prípade zadania celočíselnej hodnoty, budú časy interpretované ako časy s fixným posunom voči UTC, kde zadaná hodnota parametra definuje posun voči UTC v sekundách. Z historických dôvodov sú akceptované aj hodnoty @FALSE - časy sú interpretované ako lokálne, a @TRUE - časy sú interpretované ako časy s fixným posunom 3600 sekúnd (1 hodina) voči UTC. Použitie hodnoty @TRUE sa neodporúča a generuje upozornenie pri ukladaní ESL skriptu. Odporúča sa nahradiť ju celočíselnou hodnotou.

Ak sú definované parametre lineFrom a lineTo, import prebieha od riadku definovaného parametrom LineFrom po riadok lineTo. Ak obidva parametre majú hodnotu -1, importuje sa celý CSV súbor.

Druhý variant akcie prečíta nasledujúcich numLines riadkov z CSV súboru. Súbor musí byť otvorený funkciou FIO_OpenRead.
Akciu je výhodné použiť pri veľkých CSV súboroch, ktoré sa neodporúča čítať naraz.

Oddeľovač v CSV súbore (parameter delimiter) je možné získať volaním funkcie %GetCSVDelimiter.

Parameter _colMap umožňuje zadefinovať stĺpce cieľovej štruktúry a poradie, v akom sa budú postupne vkladať dáta z importovaného súboru. Názvy stĺpcov musia byť oddelené oddeľovačom = delimiter. V prípade potreby ignorovania niektorých sĺpcov z .csv súboru, je potrebné tieto stĺpce zadefinovať v parametri _colMap pomocou oddeľovača.

Ak sa názvy stĺpcov v _colMap nezhodujú s definíciou štruktúry, skript vyhlási chybu "Invalid name of Cols in ColMap: názvy zlých stĺpcov".
Ak parameter _colMap obsahuje string nulovej dĺžky, skript vyhlási chybu "ColMap is empty".
Ak je v .csv súbore počet stĺpcov menší ako požadovaný, neexistujúce stĺpce sa importujú ako neplatné hodnoty!

Príklad použitia:

  • bez ignorovania stĺpcov
    SD.Data má stĺpce DATE, VALUE, NR

    *.CSV má hlavičku NR, DATE, VALUE, DESCRIPT, ID

    premenná _colMap môže obsahovať:

    • NR;DATE;VALUE

    • NR;DATE

    • NR

  • s ignorovanými stĺpcami
    SD.Data má stĺpce ID, VALUE, NR

    *.CSV má hlavičku NR, DATE, VALUE, DESCRIPT, ID

    premenná _colMap môže obsahovať:

    • NR;;VALUE;;ID

    • NR;;;;ID

    • ;;VALUE;;ID

Príklad

Parameter timeMaskIdent je možné vynechať nasledujúcim spôsobom:

 

IMPORT_CSV destStruct, delimiter, fName, timeZone, retCodeIdent_Int, , lineFrom, lineTo

Príklad 2

Prečítanie celého CSV súboru po 1000 riadkoch:

 

RECORD NOALIAS (SD.AZZD_Imp_Day) _Import_H INT _retCode INT _handle _handle := %FIO_OpenRead("c:\Application\Import\LP_0407_0408180810.csv") DO_LOOP IMPORT_CSV _Import_H, ";", _handle, @FALSE, _retCode, "dd.mm.rr", 1000 ; spracovanie načítaných dát EXIT_LOOP _Import_H\DIM < 1000 END_LOOP _bOk := %FIO_Close(_handle)

Súvisiace stránky:

Akcie v skriptoch

Comments