トップページunix
984コメント289KB

Vim Part25 [転載禁止]©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2015/03/30(月) 20:04:42.55
Vim 6以降に関する話題、Part24です。
http://www.vim.org/

前スレ
Vim Part24
http://peace.2ch.net/test/read.cgi/unix/1413122189/

関連情報は>>2-6あたり
0789名無しさん@お腹いっぱい。2015/11/24(火) 07:29:01.12
そもそも根本的なお勧めな解答をするならば
糞データのほうを直したほうが良い。
0790名無しさん@お腹いっぱい。2015/11/24(火) 22:39:57.17
その糞データを直すためにvimを使おうってんじゃ?
0791名無しさん@お腹いっぱい。2015/11/24(火) 23:19:13.51
糞でもなんでもない普通のcsvじゃん
手軽にデータ整形ならvimじゃなくてスクリプト書いてやった方がいいんじゃね
0792名無しさん@お腹いっぱい。2015/11/24(火) 23:51:10.22
RFC4180にはカンマをバックスラッシュでエスケープするなんて仕様は無いってことだろな
0793名無しさん@お腹いっぱい。2015/11/25(水) 02:24:25.19
真面目にやるなら、パーサ使うとかだろうけど、
とりあえずなら、一旦、別の文字に退避とかすればいいんじゃない?

こんな感じで、

function! MySplit(str)
let vals = []
for val in split(substitute(a:str,'\\,','@@@','g'),',')
let vals += [ substitute(val, '@@@','\\,','g') ]
endfo
return vals
endf

俺の、人生初 vim function だから、出来はよくわからないけど、
とりあえず動いた。…
こんなんでも嬉しいな。
0794名無しさん@お腹いっぱい。2015/11/25(水) 10:44:48.47
結局データ直す方向か。文句は言うのに。
ちゃんと動くかは知らないし文句言われ様が短くもしないし直さない以上。
cat csv |xargs -i printf '%s\0' {} \
|sed -n 's#"[^"]*[^\],*"#&\n#; :start; s#\(".*[^\]\),\(.*"\n\)#\1\\,\2#;
t start; P; D' \
|sed ':start; N; $!b start; s#["|\n]##g'|xargs --null -i echo {}

cat csv |xargs -i printf '%s\0' {} \
|sed -n 's#"[^"]*[^\],*"#&\n#; :start; s#\(".*[^\]\),\(.*"\n\)#\1\\,\2#;
t start; P; D' \
|sed ':start; N; $!b start; s#["|\n]##g'|xargs --null -i echo {} \
|sed 's#\([^\]\),#\1\t#g'|tr -d '\\'|awk -F '\t' '{ print $0 }'
■ このスレッドは過去ログ倉庫に格納されています