- Vytvoril D2000 Dev Team na okt 12, 2017
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:
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:
Ú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.
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
D2000 Dev Team
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.