Akcia IMPORT_CSV


Funkcia
Import stĺpca alebo celej štruktúry z CSV súboru.
Deklarácia
IMPORT_CSV destStruct, delimiter, fName, bMonoTimes, retCodeIdent_Int[, timeMaskIdent][, lineFrom, lineTo][TIME] [UTF8 | ENCODING "@APP_DEFAULT@"] [COLMAP _colMap]

 
alebo
 
 IMPORT_CSV destStruct, delimiter, handle, bMonoTimes, 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.
bMonoTimes in Parameter typu Bool - spôsob práce s časom (príznak monotónneho času).
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 bMonoTimes upravuje prácu s časom vzhľadom na posun letný/zimný čas. Ak je jeho hodnota @TRUE, všetky časové hodnoty budú pri konverzii prepočítané na normálny monotónny (t.j. zimný) čas.

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, bMonoTimes, 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.

Nie ste prihlásený. Akékoľvek zmeny, ktoré vykonáte, sa označia ako anonymné. Ak už máte svoj účet, pravdepodobne sa budete chcieť prihlásiť .