【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

こんにちは。

最近Rubyでスクローリングをしているのですが、その中で文字の挿入をする場面がありました。

今現在はgsub!を用いた置換で無理矢理くっつける形を取っているのですが、
どうも効率が悪く、汎用性に欠けるような気がします。

何かもっといい方法があるのでしょうか。
曖昧な質問で申し訳ありませんが、よろしくお願いします。

以下プログラムになります。

57 when /株式数(株)\t貸借対照表計上額(千円)|株式数(株)\t貸借対照表計上額(千円)/
58 while text.match(/\d[0-9]*?\t/)
59 text.sub!(/\d[0-9]*?\t/){|s|s.concat("株1")}
60 text.sub!(/\t株1/,"株q")
61 text.sub!(/\d[0-9]*?\t/){|s|s.concat("円")}
62 text.sub!(/\t円/,",000円q")
63 end
64 text.gsub!(/q/,"\t")

改変しようとする部分の原文は以下のような文章です。

当事業年度銘   柄株式数(株)貸借対照表計上額(百万円)保有目的
(株)ナガホリ 192,000 47取引の円滑化
(株)東日本銀行 181,000 45取引の円滑化
(株)大垣共立銀行 99,000 27取引の円滑化
イオン九州(株) 16,027 25取引の円滑化
(株)名古屋銀行 37,000 14取引の円滑化
(株)みずほフィナンシャルグループ 63,800 13取引の円滑化
(株)三菱UFJフィナンシャル・グループ 22,700 12取引の円滑化
(株)桑山 8,800株 5,000,000円取引の円滑化

A 回答 (3件)

念のための確認です。


本来のデータはタブ区切りのところ当質問サイトではタブ文字が使えないため全角空白で代用されているということ、額と保有目的の間にも本来はタブ文字が入っていることがご呈示のコードから読み取れたのですが、それで間違いないでしょうか。

上記の仮定のもとで、なおかつご呈示のコードは千円単位のデータに対応したもののようですのでそれに合わせてご呈示のコードの 58 行目から 64 行目を書き換えてみました。

text.gsub!(/([1-9]\d{0,2}(,\d{3})*)\t([1-9]\d{0,2}(,\d{3})*)\t/) {|s| "#{$1}株\t#{$3},000円\t"}

以上。百万円単位のデータに対応したコード部に対しては、上記で書き換える前の行と似た行があるでしょうから、そこを上記のコードに置き換え、#{$3},000円 の部分を #{$3},000,000円 に書き換えてください。

……でも、『(株)三菱UFJフィナンシャル・グループ』の行は額に全角文字が含まれているのでこの行は変換できません。
    • good
    • 0

……いやだから、「○○という行を××のように変えたい」というのをはっきり書いてもらわないと困るんですが。


最初にご呈示の

当事業年度銘   柄株式数(株)貸借対照表計上額(百万円)保有目的
(株)ナガホリ 192,000 47取引の円滑化
(株)東日本銀行 181,000 45取引の円滑化
(株)大垣共立銀行 99,000 27取引の円滑化
イオン九州(株) 16,027 25取引の円滑化
(株)名古屋銀行 37,000 14取引の円滑化
(株)みずほフィナンシャルグループ 63,800 13取引の円滑化
(株)三菱UFJフィナンシャル・グループ 22,700 12取引の円滑化
(株)桑山 8,800株 5,000,000円取引の円滑化

をどう変えたいか改めて補足願います。

この回答への補足

説明が分かりづらくてすいません。

(株)ナガホリ 192,000 47取引の円滑化
この行を例にとると、
(株)ナガホリ 192,000株 47,000,000円 取引の円滑化
↑このように付け加えをしたいと考えております。


最終的に

当事業年度銘   柄株式数(株)貸借対照表計上額(百万円)保有目的
(株)ナガホリ 192,000株 47,000,000円取引の円滑化
(株)東日本銀行 181,000株 45,000,000円取引の円滑化
(株)大垣共立銀行 99,000株 27,000,000円取引の円滑化
イオン九州(株) 16,027株 25,000,000円取引の円滑化
(株)名古屋銀行 37,000株 14,000,000円取引の円滑化
(株)みずほフィナンシャルグループ 63,800株 13,000,000円取引の円滑化
(株)三菱UFJフィナンシャル・グループ 22,700株 12,000,000円取引の円滑化
(株)桑山 8,800株 5,000,000円取引の円滑化
↑このようにする事が理想です。

補足日時:2014/12/04 16:26
    • good
    • 0

……すみません、ご呈示の原文に対する改変結果がこうあってほしいというものを補足願います。


多分ですが、正規表現とブロックの中を工夫すれば sub は 1 回で済むと考えられます。

この回答への補足

すいません。失念しておりました。

以下に希望の結果を掲示します。

当事業年度銘   柄株式数(株)貸借対照表計上額(百万円)保有目的
(株)T&Dホールディングス243,280株276,000,000円工事受注を主とした取引関係維持強化
岡谷鋼機(株)241,500株273,000,000円工事受注および仕入れを主とした取引関係維持強化
京王電鉄(株)336,129株271,000,000円工事受注を主とした取引関係維持強化
飯野海運(株)388,000株268,000,000円工事受注を主とした取引関係維持強化
(株)キッツ567,100株267,000,000円工事受注および仕入れを主とした取引関係維持強化
新晃工業(株)290,000株255,000,000円工事受注および仕入れを主とした取引関係維持強化
(株)歌舞伎座50,000株242,000,000円工事受注を主とした取引関係維持強化



当事業年度銘   柄株式数(株)貸借対照表計上額(千円)保有目的
(株)三菱UFJフィナンシャル・グループ42,000株22,932,000円取引関係の維持・強化
(株)みずほフィナンシャルグループ61,000株12,261,000円取引関係の維持・強化
(株)フジ6,444株11,264,000円取引関係の維持・強化
片倉工業(株)4,687株5,348,000円取引関係の維持・強化
(株)サンエー240株680,000円取引関係の維持・強化


このように、千円と百万円のケースで分かれて、株式の項目の数字の後ろに「株」の文字を、
金額の数字の後ろに「,000円」または「,000,000円」を追加したいと考えています。

補足日時:2014/12/04 15:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!