Hvis dit sidste felt altid er til stede (dog trailing nullcols
foreslår, at det ikke er det), og du har en vis kontrol over formateringen, kan du bruge CONTINUEIF
direktiv om at behandle den anden linje som en del af den samme logiske post.
Hvis comments
feltet er altid til stede og omgivet af dobbelte anførselstegn, så kan du gøre:
...
truncate
continueif last != x'22'
into table ...
Som ville håndtere dataposter som:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Eller hvis du altid har et skilletegn efter kommentarfeltet, uanset om det er udfyldt eller ej:
...
truncate
continueif last != ';'
into table ...
Som ville klare:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Begge måder vil indlæse dataene som:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Men dette mister den nye linje fra dataene. For at bevare det skal du have den afsluttende feltafgrænser til stede og i stedet for CONTINUEIF
du kan ændre postseparatoren ved at bruge stream record-formatet
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
"str ';\n'"
definerer terminatoren som kombinationen af feltterminatoren og et ny linjetegn. Din opdelte kommentar har kun den kombination på den sidste linje. Med samme datafil som den tidligere version giver dette:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Da du er på Windows, skal du muligvis inkludere \r
også i formatet, f.eks. "str ';\r\n'"
, men det kan jeg ikke kontrollere.