home K2»Infoservis»Diskusní fórum»Načtení dat z csv ve skriptu

Téma založil Drastik Jan
Poslední příspěvek přidal Drastik Jan 15. listopadu 2024 11:07:18. Téma obsahuje 5 odpovědi.
Modul: Proces:
14. listopadu 2024 15:31:17
  • Drastik Jan
  • Registrován9.12.2015
  • Naposledy přihlášen 31.3.2025
Dobrý den,

nemáte někdo prosím nějaké elegantní řešení, jak načíst jednoduše .csv soubor ve skriptu do MF?

Děkuji.

15. listopadu 2024 6:19:29
  • Dékány Jan
  • Registrován1.8.2012
  • Naposledy přihlášen 1.4.2025
Ahoj Honzi... Nevím, zdali je to pátkem, ale co myslíš písmeny MF?

15. listopadu 2024 7:24:38
Dobrý den,
pokud chcete úplně jednoduše načíst csv soubor, můžete použít přímo typ csvfile, kde si můžete definovat i jednotlivé typy polí. Nicméně s některými csv soubory si tento přístup neporadí, ale pro jednoduché dobře strukturované csv bude fungovat. Csvfile však nemá indexy a proto je vhodné jej přeplnit do memfile. U přístupu přes csvfile je však problém s rozpoznáním kódování.
Dále existuje jednotka CsvParserClass, která umí rozparsovat csv soubor i s různými záludnostmi. Tím myslím použití uvozovek nebo čárek uvniř textu, odřádkování v rámci pole atd. Jednotka parsuje jednotlivé řádky a vrací pole stringů, které dále musíte zpracovat podle konkrétní úlohy. Pokud máte úplně jednoduchý soubor, kde se žádná záludnost nebude vyskytovat, většinou načítáme pomocí objektu TStringList a pak rozpadáme na jednotlivá pole pomocí StrToArray. Memfile pak definujeme podle potřeby, jaká data z csv chceme používat.
Myslím si, že je lepší přistupovat ke každému csv souboru nově podle potřeby jeho dalšího zpracování.

Za tým K2
Mikuláš Kovařčík

15. listopadu 2024 8:41:46
  • Drastik Jan
  • Registrován9.12.2015
  • Naposledy přihlášen 31.3.2025
Ahoj,

MF = MemFile :)

--------------------
Takhle vypadá csv. Za mě je jednoduchý, kde | je oddělovač a žádné záludnosti tam nejsou (kromě čárky v textu a /.) Ale ty nejsou pro mě až tak důležité, protože je to pomocný text).

Transaction ID|Accounting date|Timestamp date|Global source type|Global source details|Source type|Source details|Card type
168430967|2024-11-13T11:02:45.803000|2024-11-13T11:02:45.803000|||||1|RFID|

A nemáte prosím někde kousek skriptu pro načteni jednoduchého csv souboru?

Děkuji moc.

Příspěvek byl změněn: Drastik Jan, dne: 15.11.2024 8:43:44.

15. listopadu 2024 8:44:39
  • Tommek Petr
  • Registrován14.2.2005
  • Naposledy přihlášen 31.3.2025
Třeba:

type
TMujCSV = csvfile
Obdobi : string ;
ZboZkr : string ;
ZboPopis : string ;
Cena : string ;
CenaPozink : string ;
end;


var
MujCSV : TMujCSV;


MujCSV.CreateXf;
SetCsvAttrib(MujCSV ,'|',Chr(9),' ','yyyy.mm','hh:mm:ss');
MujCSV.PathFile := (pfPath);
MujCSV.FileName := Cesta + 'MujCSV.csv';
MujCSV.ForceValidTable;
MujCSV.Open(omNormal);
SetDosFileCutLine(MujCSV,True);

PT
Příspěvek byl změněn: Tommek Petr, dne: 15.11.2024 9:03:21.

15. listopadu 2024 11:07:18
  • Drastik Jan
  • Registrován9.12.2015
  • Naposledy přihlášen 31.3.2025
Tak nakonec nemohu využít ten jednoduchý postup. Chtěl jsem to přiohnout to poté ještě zkusit přes komponentu excelu, ale to nebyla taky cesta. Nemáte někdo prosím nějaký příklad využití načítání s třídou CsvParserClass?