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
destStructinIdentifikátor stĺpca alebo identifikátor celej lokálnej premennej typu Record.
delimiterinIdentifikátor typu Text - oddeľovač v CSV súbore.
fNameinMeno súboru aj s príponou.
timeZoneinParameter typu Text, Int alebo Bool - určuje ako budú interpretované časové značky.
timeMaskIdentinIdentifikátor typu Text - maska pre čítanie hodnoty typu Absolútny čas.
retCodeIdent_IntoutNávratová hodnota typu Int - úspešnosť akcie.
lineFrominParameter typu Int - počiatočný riadok.
lineToinParameter typu Int - koncový riadok.
handleinParameter typu Int - hodnota, ktorú vrátila funkcia FIO_OpenRead.
numLinesinParameter typu Int - maximálny počet čítaných riadkov.
TIMEinKľúčové slovo.
UTF8inKľúčové slovo.
ENCODINGinKľúčové slovo, za ním nasleduje názov kódovania súboru v textovom tvare. Zoznam podporovaných kódovaní v ESL.
COLMAPinKľúčové slovo, za ním nasleduje identifikátor typu TEXT - _colMap.
_colMapinIdentifiká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:

1 komentár

  1. PHum: prosim doplnit, ci (ak su data importovane v lokalnom case) je podporovany format A2 resp. B2 pre jednoznacne urcenie 2. hodiny pri prechode casov.

Napíšte komentár