作業メモ:テキスト処理1 2006/05/12
別にシリーズ化するつもりはないが、おそらく何回かはこのテーマで書くだろうから。
あるいは、モチベーション維持のために書く意志を奮い立たせているだけ……という見方もできるが(^^:
今回は数値のみのCSVファイルタブ区切りテキストを編集。
各フィールドはクォートされていない。
正の整数のみで、桁区切りのカンマはデータに含まれている。
上記の条件で、各フィールドの数値を全角( )で囲む必要が生じた。
まずはCSVタブ区切りテキストの内容を抜粋。
すみません、 ¥t がタブ文字だと思ってください。
で、用意したRubyスクリプトはこれ。
5月12日訂正:CSVじゃない。タブ区切りだ。
最近、以前にも増してこの手の間違いを……(^^;
以後気をつけよう。
5月13日訂正:せうぞーさんのおかげでもっと手軽に置換できることがわかりました。スクリプトは以下のとおり。
あるいは、モチベーション維持のために書く意志を奮い立たせているだけ……という見方もできるが(^^:
今回は数値のみの
各フィールドはクォートされていない。
正の整数のみで、桁区切りのカンマはデータに含まれている。
上記の条件で、各フィールドの数値を全角( )で囲む必要が生じた。
まずは
¥t¥t4¥t1¥t¥t6¥t¥t1¥t2¥t4¥t3¥t1¥t4¥t2¥t1¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t¥t1¥t¥t¥t2¥t32
10,000¥t2,000,000
すみません、 ¥t がタブ文字だと思ってください。
で、用意したRubyスクリプトはこれ。
#usr/bin/ruby
while line = ARGF.gets
line.gsub!(/([¥d]{3}|[¥d]{2}|[¥d])/) {"(#{$1})"}#3桁までの数字を( )で囲む
line.gsub!(/([¥d])),(([¥d])/) {"#{$1},#{$2}"}#桁区切りカンマ前後の( )を削除
print line
end
5月12日訂正:CSVじゃない。タブ区切りだ。
最近、以前にも増してこの手の間違いを……(^^;
以後気をつけよう。
5月13日訂正:せうぞーさんのおかげでもっと手軽に置換できることがわかりました。スクリプトは以下のとおり。
#usr/bin/ruby
while line = ARGF.gets
line.gsub!(/([¥d,]+)/) {"(#{$1})"}
print line
end
スポンサーサイト
あ、文字化け。EUCだ、うちと同じ^^
?dは¥dですね
?dは¥dですね
さっそくのご指南、感謝です!
おっしゃるとおり、数字しか入らないことがわかっています。
どうしてなのか、「少しずつ置換して、余分な置換をしたところは戻し置換する」というあまり良くない癖がついているみたい(^^;
[¥d,]+ だけで用が足りますね。
勉強になりました。
おっしゃるとおり、数字しか入らないことがわかっています。
どうしてなのか、「少しずつ置換して、余分な置換をしたところは戻し置換する」というあまり良くない癖がついているみたい(^^;
[¥d,]+ だけで用が足りますね。
勉強になりました。
rubyてワンライナーできひんの?
できます。
-e オプションで。
実はCLさんの書き込みを見て今調べました。(^^;
-e オプションで。
実はCLさんの書き込みを見て今調べました。(^^;
一行野郎でうまく変換できました(^^;
こんなにお手軽だとは。
ところで、EXCELにコピペして「セルの書式」→「ユーザー定義」でかっこで囲むって手もありかなと思ってたけど、半角かっこを全角に置換する必要があるので2度手間なんですよね。
これからは一行野郎を活用しよう(^^)
こんなにお手軽だとは。
ところで、EXCELにコピペして「セルの書式」→「ユーザー定義」でかっこで囲むって手もありかなと思ってたけど、半角かっこを全角に置換する必要があるので2度手間なんですよね。
これからは一行野郎を活用しよう(^^)
コメントの投稿
トラックバック
http://kstation2.blog10.fc2.com/tb.php/35-b3577b1b
あと、桁区切りのカンマって3桁で入っていなければ、文字列扱いってことなんでしょうか? これだと(入力まちがいで)桁間違いしてるとパーレンで囲まれませんから同じだと思うんですけど。。
えっと、勘違いしてるかもしれませんが、、[?d,]+だけでは用はたりないかな。
もしかしたら、3桁でカンマになっていないものを探すってことでしょうか?
(?d{1,3})(,?d{1,3})*ってのもあんまり意味がないですか?