Si su último campo siempre está presente (aunque trailing nullcols
sugiere que no lo es) y tiene cierto control sobre el formato, puede usar CONTINUEIF
directiva para tratar la segunda línea como parte del mismo registro lógico.
Si los comments
el campo siempre está presente y entre comillas dobles, entonces puede hacer:
...
truncate
continueif last != x'22'
into table ...
Que manejaría registros de datos como:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
O si siempre tiene un delimitador después del campo de comentarios, ya sea que se complete o no:
...
truncate
continueif last != ';'
into table ...
Que manejaría:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Ambas formas cargarán los datos como:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Pero esto pierde la nueva línea de los datos. Para mantener eso, necesita que el delimitador de campo de terminación esté presente, y en lugar de CONTINUEIF
puede cambiar el separador de registros utilizando el formato de registro de flujo
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
El "str ';\n'"
define el terminador como la combinación del terminador de campo y un carácter de nueva línea. Su comentario dividido solo tiene esa combinación en la línea final. Con el mismo archivo de datos que la versión anterior, esto da:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Dado que está en Windows, es posible que deba incluir \r
en el formato también, p. "str ';\r\n'"
, pero no puedo verificar eso.