Ruby 改行文字の挿入
こんばんは。
Rubyにおいて、改行の無いhtmlファイル(/home/edinet/**/*.html)を読み込む際に先に改行文字を入れておき、10~15行目の正規表現の通りに文字列を取得したいと考えています。
下記のままのプログラムだと改行が無いhtmlファイルであるため余計な部分まで取得してしまいます。
以下例になります。
”中外製薬(株) 100株 0,000,000円 情報収集のため”の部分の後に指定した普通株式という文字があるにもかかわらずそれ以降も取得してしまっています。
当事業年度 銘 柄 株式数(株) 貸借対照表計上額(百万円) 保有目的
大正製薬ホールディングス(株) 300,000株 2,493,000,000円 取引関係の強化のため
日本水産(株) 8,000,000株 1,736,000,000円 取引関係の強化のため
大日本住友製薬(株) 913,000株 1,497,000,000円 取引関係の強化のため
JCRファーマ(株) 550,000株 1,303,000,000円 取引関係の強化のため
アルフレッサホールディングス(株) 176,900株 1,190,000,000円 取引関係の強化のため
(株)スズケン 157,200株 628,000,000円 取引関係の強化のため
東邦ホールディングス(株) 243,400株 531,000,000円 取引関係の強化のため
(株)メディパルホールディングス 319,100株 503,000,000円 取引関係の強化のため
コニカミノルタ(株) 445,000株 428,000,000円 取引関係の強化のため
(株)三菱UFJフィナンシャル・グループ 611,000株 346,000,000円 取引関係の強化のため
(株)ほくやく・竹山ホールディングス 251,500株 176,000,000円 取引関係の強化のため
(株)みずほフィナンシャルグループ 504,080株 102,000,000円 取引関係の強化のため
(株)バイタルケーエスケー・ホールディングス 99,600株 77,000,000円 取引関係の強化のため
イワキ(株) 29,000株 5,000,000円 取引関係の強化のため
塩野義製薬(株) 1,000株 1,000,000円 情報収集のため
田辺三菱製薬(株) 1,000株 1,000,000円 情報収集のため
小野薬品工業(株) 100株 0,000,000円 情報収集のため
(株)三菱ケミカルホールディングス 1,500株 0,000,000円 情報収集のため
アステラス製薬(株) 100株 0,000,000円 情報収集のため
武田薬品工業(株) 100株 0,000,000円 情報収集のため
エーザイ(株) 100株 0,000,000円 情報収集のため
第一三共(株) 200株 0,000,000円 情報収集のため
中外製薬(株) 100株 0,000,000円 情報収集のため
普通株式 296,000,000株
計 296,000,000,000,000円
普通株式 132,891,217株 132,891,217,000,000円 東京証券取引所(市場第一部) 単元株式数1,000株
計 132,891,217株 132,891,217,000,000円 ― ―
平成14年8月2日(注) ― 132,891株 ― 26,137,000,000円 △8,735株 22,454,000,000円
政府及び地方公共団体 金融機関 金融商品取引業者 その他の法人 外国法人等 個人その他 計
個人以外 個人
株主数(人) ― 48株 38,000,000円 273株 130,000,000円 19株 18,939,000,000円 19,447株 ―
所有株式数(単元) ― 21,507,000,000円 1,088株 34,172,000,000円 26,219株 22,000,000円 48,527株 131,535,000,000円 1,356,217株
所有株式数の割合(%) ― 16.35,000,000円 0.83株 25.98,000,000円 19.93株 0.02,000,000円 36.89株 100.00,000,000円 ―
以下のメソッドでそういった事をしようとする場合、どのようにして入れれば良いのでしょうか?
File.openとeach_line、gsub!を用いて置換して挿入する方法では上手く取得することができませんでした。
以下プログラムになります。
1 text = ""
2
3 data = Dir.glob("/home/edinet/**/*.html")
4
5 data.each do |find|
6
7 flag = nil
8 IO.foreach(find) do |line2|
9
10 case line2
11 when /保有目的が純投資目的以外の目的である投資株式の保有区分、銘柄、株式数、貸借対照表計上額及び保有目/
12 flag = true
13 when /保有目的が純投資目的である投資株式の前事業年度|保有目的が純投資目的|普通株式/
14 flag = false
15 end
16
17 text << line2.chomp if flag == true
18
19 end
20
21
22
23 text.gsub!(/<\/td>/,"\t")
24 text.gsub!(/<\/tr>/,"\n")
25 text.gsub!(/<[^>]+>/,"")
26
27 text.gsub!(/前事業年度特定投資株式/,"前事業年度")
28 text.gsub!(/当事業年度特定投資株式/,"当事業年度")
29 text.gsub!(/前事業年度 特定投資株式/,"前事業年度")
30 text.gsub!(/当事業年度 特定投資株式/,"当事業年度")
31 text.gsub!(/前事業年度\t\t\t\t\n銘 柄/,"\n前事業年度\t銘 柄")
32 text.gsub!(/当事業年度\t\t\t\t\n銘 柄/,"\n当事業年度\t銘 柄")
33 text.gsub!(/^.*nbsp.*/,"")
34 text.sub!(/銘柄\t株式数/,"\t\t\t\t\n前事業年度\t銘 柄\t株式数")
35 text.sub!(/銘柄\t株式数/,"\t\t\t\t\n当事業年度\t銘 柄\t株式数")
36 text.sub!(/銘柄\t株式数/,"\t\t\t\t\n前事業年度\t銘 柄\t株式数")
37 text.sub!(/銘柄\t株式数/,"\t\t\t\t\n当事業年度\t銘 柄\t株式数")
38 text.gsub!(/前事業年度 特定投資株式/,"")
39 text.gsub!(/当事業年度 特定投資株式/,"")
40
41 print text
ご回答の程よろしくお願いいたします。
補足
回答ありがとうございます。 調べたところ、確かに改行の数が少なく、長く取得してしまう原因となっているようでした。 そこで対策を取りたいのですが、これは元々のhtmlに置換などで改行文字を与えてやれば良いのでしょうか? それともRubyの方でまた別のメソッドがあるのでしょうか。 お願いします。