
こんばんは。
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
ご回答の程よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
No1.です。
EDINETらしいことは分かったので、「公告閲覧」で出てきたページの例を書いていきます。
ソースコードをEDINET.htmlでファイルとして保存している場合は以下のプログラムで表の中身を取り出せます。
表が2つあったので、二番目の表とするより
<DIV class="result">
の直下の表として取り出しています。また、テキスト部分に\tなどやたらあるのでそれを取り除いています。
require 'nokogiri'
doc = Nokogiri::HTML(IO.read("EDINET.html"))
div_result=doc.xpath('//div[@class="result"]')
table=div_result.xpath('table')
rows=table.xpath('tr')
results=rows[1..-1].collect{|row|
columns=row.xpath('td')
columns.collect{|c| c.text.delete("\t\r\n")}
}
p results
No.2
- 回答日時:
こんにちは
後々のことを考慮すると、私もNokogiriの様なパーサを使用するのが良いと思いますが、いきなり習得しろというのも難しいのかもしれませんね。
> File.openとeach_line、gsub!を用いて置換して挿入する方法では上手く取得することができませんでした。
まだパーサの存在を知る前に、全く改行のないHTMLを処理したことがあったのですが、そのときは全てのタグの閉じ(>)に改行を付加して一旦別ファイルに出力し、改めてそのファイルを読んで一行ずつ処理しました。
※段付けの為、行頭に全角スペースを使用しています。
data.each do |find|
File.open("find2.txt", "w") do |f2|
File.foreach(find) do |line|
line.gsub!(/>/, ">\n")
f2.puts line
end
end
flag = nil
IO.foreach("find2.txt") do |line2|
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 確定申告 株式の一般口座の給与所得者20万円以下、不要と言われている件で 5 2023/02/28 19:35
- 投資・株式の税金 一般口座で同一銘柄の総平均法のことで 1 2023/02/27 22:08
- 確定申告 《ふるさと納税について質問です》前回質問の訂正と追記 4 2022/09/16 20:17
- 株式市場・株価 名義書換しない株式 1 2022/07/14 22:07
- 経済 もはや世界中の株式市場のバブルが崩壊したのは誰の目にも明らか。認めていないのは市場関係者 1 2022/05/14 21:56
- 外国株 バフェット様の投資哲学は 真に価値ある、現在は株価が バリュー(割安)株に投資する。 ハイテク株は罠 2 2023/04/30 09:28
- その他(資産運用・投資) トンチン年金か高配当銘柄投資か 1 2022/04/10 10:59
- ふるさと納税 《ふるさと納税について質問です》 6 2022/08/26 15:09
- 不動産投資・投資信託 投資信託に詳しい方、お願いします 3 2022/06/11 13:29
- 法学 全部取得条項付株式の取得と引換えにする株式の発行 申請書について 1 2022/12/21 17:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Ruby require ライブラリー
-
c言語でランタイムエラーの処理...
-
ruby OpenURI::Meta
-
ruby while式
-
(再質問)エクセルのマクロボ...
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ビーリアルのユーザー名を変え...
-
pythonエラー
-
英数字を含む文字列(0-9,A-Z)...
-
Accessで文字列のバイト数読み込み
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
-
ルビー言語 csvファイル 続き
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby 正規表現で特定の文字を取...
-
Ruby 改行文字の挿入
-
文字コードの変換について教え...
-
Ruby 正規表現による文字列取得
-
Ruby 文字の挿入(置換)
-
Ruby 正規表現での文字列取得
-
REXMLについて教えてください2
-
Ruby 正規表現と置換
-
「&」 「<<」 「|」 につ...
-
Ruby flagによるファイルの特定...
-
{Ruby}ディレクトリ内の全ての...
-
Rubyの正規表現、文字の追加
-
Ruby flagによるファイルの特定...
-
Ruby 改行文字の認識
-
Rubyにおける、XPathの関数「te...
-
VBAでcsvファイルもシートもあ...
-
Excelマクロ 空白セルを無視し...
-
【ExcelVBA】300万件越えCSVか...
-
バッチ処理 特定の文字以降を...
-
ダブルコーテーション付きでCSV...
おすすめ情報