Als uw laatste veld altijd aanwezig is (hoewel trailing nullcols
suggereert van niet) en u enige controle heeft over de opmaak, kunt u de CONTINUEIF
instructie om de tweede regel te behandelen als onderdeel van hetzelfde logische record.
Als de comments
veld altijd aanwezig is en tussen dubbele aanhalingstekens staat, dan kunt u het volgende doen:
...
truncate
continueif last != x'22'
into table ...
Welke gegevensrecords zou verwerken zoals:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Of als u altijd een scheidingsteken heeft na het opmerkingenveld, of dit nu is ingevuld of niet:
...
truncate
continueif last != ';'
into table ...
Welke zou omgaan met:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Beide manieren laden de gegevens als:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Maar dit verliest de nieuwe regel uit de gegevens. Om dat te behouden, moet het scheidingsteken voor het afsluitende veld aanwezig zijn, en in plaats van CONTINUEIF
u kunt het recordscheidingsteken wijzigen met behulp van het stream-recordformaat
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
De "str ';\n'"
definieert de terminator als de combinatie van de veldterminator en een nieuw regelteken. Uw gesplitste opmerking heeft alleen die combinatie op de laatste regel. Met hetzelfde gegevensbestand als de vorige versie geeft dit:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Aangezien u Windows gebruikt, moet u mogelijk \r
. opnemen ook in het formaat, b.v. "str ';\r\n'"
, maar dat kan ik niet controleren.