InDesign居残り補習室

どれだけ勉強しても上達しない管理人の、InDesign備忘録を中心に。たまにブックレビューなども。

スポンサーサイト  --/--/--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


算用数字を1桁全角/2桁以上半角に  2006/05/19

今夜もヘタレscriptを恥ずかしげもなく(いや恥ずかしいけど^^;)アップ。
# sedメインで使ってた時は、少々スクリプトが長くても気にもしなかったけど。

tr! メソッドで全角数字0-9を半角数字0-9に置換できると思ったらダメだった。
正規表現 [^¥w] で英数字の補集合になると思ったけどなんかちがうっぽい。

一桁数字を全角、二桁以上の数字を半角に置換するスクリプトを考えてみた。
メルアドやURL、小数点や桁区切りカンマを含む数字は置換対象から外す。
という条件で私が書くと、例によってまた長くなっちゃった……


サンプルテキストファイルの内容:

1,000円
1.0
18.5.1
平成5年5月5日
jituzaisinai4@jp.jp
http://www.jituzaisinai4.jp/
7
平成17年12月31日 ナンバー9


Rubyスクリプトの内容:

#!usr/bin/ruby -Ks
while line = ARGF.gets
line.gsub!("0") {"0"}
line.gsub!("1") {"1"}
line.gsub!("2") {"2"}
line.gsub!("3") {"3"}
line.gsub!("4") {"4"}
line.gsub!("5") {"5"}
line.gsub!("6") {"6"}
line.gsub!("7") {"7"}
line.gsub!("8") {"8"}
line.gsub!("9") {"9"}
while /[^0-9A-Za-z@<,¥._-]+¥d[^0-9A-Za-z@<,¥._-]+/ =~ line
line.gsub!(/([^0-9A-Za-z@<,¥._-])0([^0-9A-Za-z@<,¥._-])/) {"#{$1}0#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])1([^0-9A-Za-z@<,¥._-])/) {"#{$1}1#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])2([^0-9A-Za-z@<,¥._-])/) {"#{$1}2#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])3([^0-9A-Za-z@<,¥._-])/) {"#{$1}3#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])4([^0-9A-Za-z@<,¥._-])/) {"#{$1}4#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])5([^0-9A-Za-z@<,¥._-])/) {"#{$1}5#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])6([^0-9A-Za-z@<,¥._-])/) {"#{$1}6#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])7([^0-9A-Za-z@<,¥._-])/) {"#{$1}7#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])8([^0-9A-Za-z@<,¥._-])/) {"#{$1}8#{$2}"}
line.gsub!(/([^0-9A-Za-z@<,¥._-])9([^0-9A-Za-z@<,¥._-])/) {"#{$1}9#{$2}"}
end
line.sub!(/^0([^0-9A-Za-z@<,¥._-])/) {"0#{$1}"}
line.sub!(/^1([^0-9A-Za-z@<,¥._-])/) {"1#{$1}"}
line.sub!(/^2([^0-9A-Za-z@<,¥._-])/) {"2#{$1}"}
line.sub!(/^3([^0-9A-Za-z@<,¥._-])/) {"3#{$1}"}
line.sub!(/^4([^0-9A-Za-z@<,¥._-])/) {"4#{$1}"}
line.sub!(/^5([^0-9A-Za-z@<,¥._-])/) {"5#{$1}"}
line.sub!(/^6([^0-9A-Za-z@<,¥._-])/) {"6#{$1}"}
line.sub!(/^7([^0-9A-Za-z@<,¥._-])/) {"7#{$1}"}
line.sub!(/^8([^0-9A-Za-z@<,¥._-])/) {"8#{$1}"}
line.sub!(/^9([^0-9A-Za-z@<,¥._-])/) {"9#{$1}"}
print line
end

スポンサーサイト

trを使ったり、メソッド(def)を使うともうすこしすっきりするかもしれませんね。
いまちょっと書いたら、全部で14行でした。まあ、短ければいいということではないですけど^^

> 短ければいいということではないですけど^^

そ、そうですか?
私はすっきりと短くしたい。。。

tr やっぱり使うんですよね。
うーん。もすこし考えてみよう。

>tr やっぱり使うんですよね。

tr中に日本語がまざるときには
require "jcode"
と最初に書いてみてください。

一応うちのBBSにわたしなりの書き方で書いてみました。決して模範解答ではありませんので、為念。

私が書くとしたらこんな感じです。
#!usr/bin/ruby -Ks
require 'jcode'
require 'uri'

mail_chars = '[0-9A-Za-z_!#\$%&*+\-\/=\?^_{|}\~\.]+'
mail_regexp = Regexp::new("#{mail_chars}@#{mail_chars}", 'n')
d2_regexp = /[0-9\d,.]{2,}/
regexp = Regexp.union(URI.regexp, mail_regexp, d2_regexp)

while ARGF.gets
puts $_.chop.scan(/(#{regexp.to_s}|.)/).map{|w|
w.first =~ regexp ? w.first.tr("0-9", "0-9") : w.first.tr("0-9", "0-9")
}.join
end

mail_chars は以下の記事から持ってきました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/35453

>> せうぞーさん
BBS拝見しました。ご指南ありがとうございます。

>> kawauchiさん
ご指南ありがとうございます。

とても勉強になります。

あ、そういえば、なぜ私が検索パターンの中に“<”を入れているのか説明してなかったので蛇足ですが補足。

テキストに
<1>文字列</1>
という目印をつけて、あとでInDesignタグやxmlタグに置換する場合があるので不等号内の数字も全角にしたくなかったのです。

しかしまあ、単純に不等号を検索パターンに混ぜてもいいし、“戻し置換”をしてもいいし、目印にひとけたを使わず<01>を使ってもいいし。

結局今回のはせうぞー様謹製スクリプトのprint行直前の行に、

> line.gsub!(/(<¥/?[^>]+>)/) {zen2han($1)}


を入れることで作業させていただきました。

kawauchi様のスクリプトも模範解答の1つとして大変参考になりました。ありがとうございました。

私もつまみ食いばっかりしてないで、ライブラリもきちんとチェックします。

私は似たような仕様のものをsedで書いて使い回しています。
私の場合は英数字全てを対象にしてるので、もっと冗長で見栄えが悪いですが(^^;

そろそろsedから離れないとなぁ…。

> そろそろsedから離れないとなぁ…。
いえいえ、使い慣れた道具を否定するつもりはないですよ。
しかし、私がrubyを覚えたいと思った理由は、sedと同じ事を短い行数で実現できるので、馴れればsedスクリプトを書くのと較べて時間の節約になるだろうな、と。
今のところ逆に時間かかってますけれども orz

タメになりました

この記事にコメントを残したときは自分でrubyさわるとは思ってなかったのですが、いざやってみると、難しい…。
同じところでつまずいてくださって、感謝です(笑)

なによりです^^

こんなつまみ食いの記録が参考になったのであれば、私としてもうれしいです^^
今でもsedはたまーに使いますが、タブ区切りテキストの操作はrubyなしだとツライですね。
……いまだにつまみ食い状態ですけれど(汗)

コメントの投稿





管理者にだけ表示を許可する

トラックバック

http://kstation2.blog10.fc2.com/tb.php/37-3f386004

(新しい記事)← 先頭文字スタイル
作業メモ:テキスト処理2 →(古い記事)

 | HOME | 

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

FC2カウンター

2006年3月28日カウント開始

Amazon

FC2 Affiliate

動くPDF

プロフィール

あわせて読みたい

あわせて読みたいブログパーツ

最近の記事

最近のコメント

最近のトラックバック

Lc.ツリーリンク

RSSリンク

直感カテゴリーツリーV1.1

ブログ内検索

ブロとも一覧

marumi

神楽崎 ゆう


■ ブログ名:I'm writing NOVEL

七篠 銀字


■ ブログ名:風と夜空と氷の国

MS


■ ブログ名:へなちょこDTP

桜桃


■ ブログ名:追憶の桜吹雪

瑪瑙 輝遊


■ ブログ名:千里の道も一歩から

magatu


■ ブログ名:unsigned

暁 鷲 (あかつき しゅう)


■ ブログ名:空を裂け!

NewMark

C-Roll


FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。