最後のフィールドが常に存在する場合(trailing nullcols
そうではないことを示唆しています)、フォーマットをある程度制御できる場合は、 CONTINUEIF
2行目を同じ論理レコードの一部として扱うディレクティブ。
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'"
、しかし私はそれを確認することができません。