DBでSELECTした結果をCSV出力する処理に、値をダブルクォーテーションで括る機能を追加したいです。
その処理にはヘッダーファイルを指定できる機能と改行コードを指定できる機能(CR、LR、CRLF)があります。
ヘッダーファイルを指定した場合にCRかCRLFを指定するとダブルクォーテーションの付く位置がおかしくなってしまいます。
ヘッダーファイルを指定しなかった場合の挙動は問題ないです。
ヘッダーファイルを指定した際のダブルクォーテーションで括る処理は次のような感じにしています。
ヘッダーファイルの内容が一行目に出力されるので、都合上、一行目と二行目以降を分けて処理しています。
sh
1head -n 1 test.csv | tail -n 1 | sed -e 's/^/"/' -e 's/$/"/' -e 's/,/","/g' > out.csv 2tail -n +2 test.csv | sed -e 's/^/"/' -e 's/$/"/' -e 's/,/","/g' >> out.csv
改行コードがLFの際は全く問題ないです。
CRの場合は、一行目の末尾と二行目以降にダブルクォートが付きません。
"aaa","bbb","ccc
ddd,eee,fff
CRLFの場合は、一行目の末尾が改行されてからダブルクォートが付き、二行目以降は、二行目の先頭、最終行の末尾、カンマの両端のみダブルクォートが付きます。
"aaa","bbb","ccc
"
"ddd","eee","fff
ggg","hhh","iii
jjj","kkk","lll"
初心者ながら考えた結果としては、CRがどうにも悪さをしていると考えています。
色々ネットで見てはみましたが解決方法がわからずです。
説明がわかりにくいかとは思いますが、解決策などヒントをいただけないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/26 04:23