InDesign居残り補習室

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

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

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


作業メモ:テキスト処理3  2006/06/01

今回は、作業メモ:テキスト処理2と似てるけどちょっとだけ条件が増えたヤツ。

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

2998¥t文字列¥tHOGE¥t¥t1,800,000¥t
コメント1行目¥t¥t¥t¥t¥t
コメント2行目¥t¥t¥t¥t¥t
2999¥tfoo¥tbar¥t文字列¥t157,500¥t
3000¥t¥t¥t¥t105,000¥t
3001¥t3,000¥t4,000¥t5,000¥t200¥t




1レコードあたり6フィールドのデータで、第4フィールドについては空のレコードもある。
また、今回もコメント行がある。
コメント行は第1フィールドのみにデータが入力されており、他の5つのフィールドは空である。

今回施したい処理は以下の通り。
フィールド内のデータは左から順に

1[data]2[data]3[data]4[data]5[data]data

という形に囲み、フィールドセパレータのタブは削除。
なお、第6フィールドはブラケットで囲まない。
コメント行は、

%[data]%

という形に前後を囲みたい。

そしてさらに。
第1フィールドと第5フィールドの全角数字を漢数字、桁区切りの全角カンマを読点に置換したい。
このとき、千・百・十などの漢数字の挿入は不要。

とりあえず、書いたrubyスクリプトはこれ。
置換はできたんだけど……。

require "jcode"

def num2kan(kan)
kan.tr!("0123456789,", "〇一二三四五六七八九、")
return kan
end

while line = ARGF.gets
line.gsub!(/([0-9,]{2,}¥t)/) {num2kan($1)}
line.sub!(/^([^¥t]+)¥t([^¥t]*)¥t([^¥t]*)¥t([^¥t]*)¥t([^¥t]*)¥t([^¥t¥r¥n]+)/) {"1[#{$1}]2[#{$2}]3[#{$3}]4[#{$4}]5[#{$5}]#{$6}"}
line.sub!(/^([^¥t]+)¥t+$/) {"%[#{$1}]%"}
print line
end


実際に仕事で使うテキストには第1と第5フィールド以外、全角数字+全角カンマだけの組合せで入力されているフィールドがないことはわかっているのだが、サンプルテキストには試しに第2~第4フィールドにも全角数字+全角カンマだけの組合せの文字列を入れてみたのだ。
結果は、当然というか、全てのフィールドについて全角数字+全角カンマだけの組合せのフィールドがあった場合、漢数字に変換されてしまう。

むー。別に汎用性を求めるようなスクリプトじゃないんだから、これでいいといえばいいんだけど、、、ぶつぶつ。
スポンサーサイト

とりあえず、そのまま書くとこうでしょうか?

#!/usr/bin/ruby -Ks
require "jcode"

def num2kan(num)
num.tr("0-9,", "〇一二三四五六七八九、")
end

while ARGF.gets
a = $_.chop.split("\t")
if a[1..5].empty?
puts "%[#{a[0]}]%"
else
a[0] && a[0].gsub!(/([0-9,]{2,})/){num2kan($1)}
a[4] && a[4].gsub!(/([0-9,]{2,})/){num2kan($1)}
puts "1[#{a[0]}]2[#{a[1]}]3[#{a[2]}]4[#{a[3]}]5[#{a[4]}]#{a[5]}"
end
end

kawauchiさん、いつもありがとうございます。
前回も、タブで分けて配列に入れるやり方を教わったばかりでしたね^^;

学習能力のない、デキの悪い生徒ですみません……。
今後とも、よろしくご指導のほど。

元のコードを残す形で書いてみました。

#!/usr/bin/ruby -Ks
require "jcode"

def num2kan(num)
num.gsub(/([0-9,]{2,})/) {$1.tr("0-9,", "〇一二三四五六七八九、")}
end

while line = ARGF.gets
line.sub!(/^([^\t]+)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t\r\n]+)/) {"1[#{num2kan($1)}]2[#{$2}]3[#{$3}]4[#{$4}]5[#{num2kan($5)}]#{$6}"}
line.sub!(/^([^\t]+)\t+$/) {"%[#{$1}]%"}
print line
end

私のコードはよく分からないで書いている部分も多いので参考程度にしてもらえたらと思います。
また、最初のコメントのやつは重複が多かったので少し直しました。

#!/usr/bin/ruby -Ks
require "jcode"

class Object
def to_kan!
self && self.gsub!(/([0-9,]{2,})/) {$1.tr("0-9,", "〇一二三四五六七八九、")}
end
end

while ARGF.gets
a = $_.chop.split("\t")
if a[1..5].empty?
printf("%[%s]%\n", *a)
else
a[0].to_kan!
a[4].to_kan!
printf("1[%s]2[%s]3[%s]4[%s]5[%s]%s\n", *a)
end
end

>> 参考程度
とんでもございません。教科書にさせていただきます(笑)

>> 重複
あ、なるほど!
ありがとうございました。

コメントの投稿





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

トラックバック

http://kstation2.blog10.fc2.com/tb.php/40-39c612f9

(新しい記事)← しつこいアウトライン信者への対応
作業メモ:InDesignタグ →(古い記事)

 | 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。