Pokud je vaše poslední pole vždy přítomno (ačkoli trailing nullcols
naznačuje, že není) a máte určitou kontrolu nad formátováním, můžete použít CONTINUEIF
direktiva pro zpracování druhého řádku jako součásti stejného logického záznamu.
Pokud comments
pole je vždy přítomno a uzavřeno ve dvojitých uvozovkách, pak můžete:
...
truncate
continueif last != x'22'
into table ...
Které by zpracovávaly datové záznamy jako:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Nebo pokud máte za polem komentářů vždy oddělovač, ať už je vyplněno nebo ne:
...
truncate
continueif last != ';'
into table ...
Což by zvládlo:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Oba způsoby načtou data jako:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Tím se ale ztratí nový řádek z dat. Chcete-li to zachovat, je třeba, aby byl přítomen koncový oddělovač pole a namísto CONTINUEIF
oddělovač záznamů můžete změnit pomocí formátu záznamu streamu
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
"str ';\n'"
definuje zakončení jako kombinaci zakončení pole a znaku nového řádku. Váš rozdělený komentář má tuto kombinaci pouze na posledním řádku. Se stejným datovým souborem jako předchozí verze to dává:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Protože používáte Windows, možná budete muset zahrnout \r
i ve formátu, např. "str ';\r\n'"
, ale nemohu to zkontrolovat.