Ако последното ви поле винаги присъства (въпреки че trailing nullcols
предполага, че не е) и имате известен контрол върху форматирането, можете да използвате CONTINUEIF
директива за третиране на втория ред като част от същия логически запис.
Ако comments
винаги присъства и е оградено в двойни кавички, тогава можете да направите:
...
truncate
continueif last != x'22'
into table ...
Което би обработвало записи на данни като:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Или ако винаги имате разделител след полето за коментари, независимо дали е попълнено или не:
...
truncate
continueif last != ';'
into table ...
Което би обработило:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
И двата начина ще заредят данните като:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Но това губи новия ред от данните. За да запазите това, трябва да присъства крайният разделител на полето и вместо CONTINUEIF
можете да промените разделителя на записи, като използвате формат за запис на поток
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
"str ';\n'"
дефинира терминатора като комбинация от знак за край на полето и знак за нов ред. Вашият разделен коментар има само тази комбинация на последния ред. Със същия файл с данни като предишната версия, това дава:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Тъй като сте на Windows, може да се наложи да включите \r
и във формата, напр. "str ';\r\n'"
, но не мога да проверя това.