Se il tuo ultimo campo è sempre presente (sebbene trailing nullcols
suggerisce che non lo è) e hai un certo controllo sulla formattazione, puoi utilizzare CONTINUEIF
direttiva per trattare la seconda riga come parte dello stesso record logico.
Se i comments
il campo è sempre presente e racchiuso tra virgolette quindi puoi fare:
...
truncate
continueif last != x'22'
into table ...
Che gestirebbe record di dati come:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Oppure se hai sempre un delimitatore dopo il campo dei commenti, indipendentemente dal fatto che sia popolato o meno:
...
truncate
continueif last != ';'
into table ...
Che gestirebbe:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Entrambi i modi caricheranno i dati come:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Ma questo perde la nuova riga dai dati. Per mantenerlo è necessario che sia presente il delimitatore di campo di terminazione e invece di CONTINUEIF
è possibile modificare il separatore di record utilizzando il formato del record di flusso
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
Il "str ';\n'"
definisce il terminatore come la combinazione del terminatore di campo e un nuovo carattere di riga. Il tuo commento diviso ha solo quella combinazione nella riga finale. Con lo stesso file di dati della versione precedente, questo dà:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Dato che sei su Windows, potresti dover includere \r
anche nel formato, ad es. "str ';\r\n'"
, ma non sono in grado di verificarlo.