• 締切済み

Ruby 文字の挿入(置換)

こんにちは。 最近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円 取引の円滑化

みんなの回答

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.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フィナンシャル・グループ』の行は額に全角文字が含まれているのでこの行は変換できません。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

……いやだから、「○○という行を××のように変えたい」というのをはっきり書いてもらわないと困るんですが。 最初にご呈示の 当事業年度銘   柄株式数(株)貸借対照表計上額(百万円)保有目的 (株)ナガホリ 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円取引の円滑化 をどう変えたいか改めて補足願います。

alpacasan15
質問者

補足

説明が分かりづらくてすいません。 (株)ナガホリ 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円取引の円滑化 ↑このようにする事が理想です。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

……すみません、ご呈示の原文に対する改変結果がこうあってほしいというものを補足願います。 多分ですが、正規表現とブロックの中を工夫すれば sub は 1 回で済むと考えられます。

alpacasan15
質問者

補足

すいません。失念しておりました。 以下に希望の結果を掲示します。 当事業年度 銘   柄 株式数(株) 貸借対照表計上額(百万円) 保有目的 (株)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円」を追加したいと考えています。

関連するQ&A