こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

Ruby 正規表現による文字列取得

こんにちは。

何度か質問させていただいていたのですが、正規表現を使っても正しく取得できない部分があったので質問させていただきました。

取得したい文字列の部分にflagをたてて、そこからfalseになるまで取得し続ける形をとっているのですが、どうもfalseになってbreakするはずの部分で取得を終了してくれません。

どう直せば良いのでしょうか?ご教授お願い致します。

プログラムは以下の通りです。

2 text = ""
3
4 data = "/home/edinet/E05267/S1001YX6/index.html"
5
6 flag = nil
7 IO.foreach(data) do |line2|
8 line2.gsub!(/普通株式/,"\nEOF")
9 case line2
10 when /保有目的が純投資目的以外の目的である投資株式の保有区分|保有目的が純投資目的以外/
11 flag = true
12
13 when /保有目的が純投資目的である投資株式の前事業年度|EOF|無議決権株式|政府及び地方公共団体|調 整 後 転 換 価 額|保有目的が純投資目的|普通株式|監査報酬の内容等/
14 flag = false if flag == true
15
16 end
17
18 text << line2.chomp if flag != nil
19 break if flag == false
20
21 end
22 text.gsub!(/<\/td>/,"\t")
23 text.gsub!(/<\/tr>/,"\n")
24 text.gsub!(/<[^>]+>/,"")
25 print text

実行結果

ロ 保有目的が純投資目的以外の目的である投資株式の保有区分、銘柄、株式数、貸借対照表計上額及び保有目的&nbsp;(前事業年度)特定投資株式銘柄株式数(株)貸借対照表計上額(千円)保有目的
アイサンテクノロジー株式会社50,00011,150取引関係の維持強化
セイコーエプソン株式会社10,0009,130取引関係の維持強化
株式会社トプコン10,0008,570取引関係の維持強化
株式会社大和証券グループ本社10,0006,560取引関係の維持強化
株式会社八十二銀行10,0005,690取引関係の維持強化
佐田建設株式会社60,0004,500取引関係の維持強化
&nbsp;&nbsp;(当事業年度)特定投資株式銘柄株式数(株)貸借対照表計上額(千円)保有目的
アイサンテクノロジー株式会社50,00043,900取引関係の維持強化
セイコーエプソン株式会社10,00032,100取引関係の維持強化
株式会社トプコン10,00016,920取引関係の維持強化
株式会社大和証券グループ本社10,0008,980取引関係の維持強化
福井コンピュータホールディングス株式会社10,0008,650取引関係の維持強化
株式会社八十二銀行10,0005,870取引関係の維持強化
&nbsp;&nbsp;ハ&nbsp; 保有目的が純投資目的である投資株式該当事項はありません。&nbsp;(6) 会計監査の状況当社は、金融商品取引法監査について有限責任監査法人トーマツより継続的に監査を受けており、正確な経営情報・財務情報の提供に配慮しております。業務を執行した公認会計士の氏名所属する監査法人
指定有限責任社員業務執行社員五十幡 理一郎有限責任監査法人トーマツ
指定有限責任社員業務執行社員小&nbsp; 松&nbsp;&nbsp;&nbsp;&nbsp; 聡有限責任監査法人トーマツ
&nbsp;継続関与年数については、7年以内であるため記載を省略しております。また、公認会計士4名、その他2名が会計監査業務に関っております。&nbsp;&nbsp;(7) 取締役会で決議することができる株主総会決議事項(自己の株式の取得)当社は、経営環境の変化に対応した機動的な資本政策を行うため、会社法第165条第2項の規定により、「取締役会の決議によって市場取引等により自己の株式を取得することができる。」旨を定款に定めております。&nbsp;(中間配当)当社は、株主への機動的な利益還元を行うため、会社法第454条第5項の規定により、「取締役会の決議によって、毎年9月30日を基準日として、中間配当を行うことができる。」旨を定款に定めております。&nbsp;(8) 取締役の定数当社の取締役は、「7名以内とする。」旨を定款に定めております。&nbsp;(9) 取締役の選任の決議要件当社は、取締役の選任決議について、「株主総会において議決権を行使することができる株主の議決権の3分の1以上を有する株主が出席し、その議決権の過半数をもって行い、かつ累積投票によらない。」旨を定款に定めております。&nbsp;(10) 株主総会の特別決議要件当社は、株主総会における特別決議の定足数を緩和することにより、株主総会の円滑な運営を行うため、会社法第309条第2項に定める株主総会の特別決議要件について、「議決権を行使することができる株主の議決権の3分の1以上を有する株主が出席し、その議決権の3分の2以上をもって行う。」旨を定款に定めております。&nbsp;(2) 【監査報酬の内容等】&nbsp;(1) 【監査公認会計士等に対する報酬の内容】前事業年度当事業年度
監査証明業務に基づく報酬(千円)非監査業務に基づく報酬(千円)監査証明業務に基づく報酬(千円)非監査業務に基づく報酬(千円)
14,600─14,600500
&nbsp;&nbsp;(2) 【その他重要な報酬の内容】該当事項はありません。&nbsp;(3) 【監査公認会計士等の提出会社に対する非監査業務の内容】前事業年度該当事項はありません。&nbsp;当事業年度当社は監査公認会計士等に対して、公認会計士法第2条1項の監査証明業務以外の業務である内部管理体制の整備に関する助言・指導業務について対価を支払っております。&nbsp;(4) 【監査報酬の決定方針】当社の監査法人に対する監査報酬の決定方針としましては、事前に見積書の提示を受け、監査日数、監査内容及び当社の規模等を総合的に勘案し、監査役会及び関連部門と協議を行ったうえ決定することとしております。&nbsp;第5 【経理の状況】&nbsp;1.財務諸表の作成方法について当社の財務諸表は、「財務諸表等の用語、様式及び作成方法に関する規則」(昭和38年大蔵省令第59号。以下「財務諸表等規則」という。)に基づいて作成しております。 なお、当事業年度(平成25年4月1日から平成26年3月31日まで)の財務諸表に含まれる比較情報については、「財務諸表等の用語、様式及び作成方法に関する規則等の一部を改正する内閣府令」(平成24年9月21日内閣府令第61号)附則第2条第2項により、改正前の財務諸表等規則に基づいて作成しております。&nbsp;2.監査証明について当社は、金融商品取引法第193条の2第1項の規定に基づき、事業年度(平成25年4月1日から平成26年3月31日まで)の財務諸表について、有限責任監査法人トーマツにより監査を受けております。&nbsp;3.連結財務諸表について当社は子会社がありませんので、連結財務諸表を作成しておりません。&nbsp;4.財務諸表等の適正性を確保するための特段の取組みについて当社は、財務諸表等の適正性を確保するための特段の取組みを行っております。具体的には、会計基準等の内容を適切に把握し、又は会計基準等の変更等について適切に対応することができる体制を整備するため、公益財団法人財務会計基準機構へ加入し、同機構が開催する研修等へ参加しております。

※長いためこれ以降は割愛します。

よろしくお願いします。

投稿日時 - 2014-11-25 16:24:10

QNo.8836949

すぐに回答ほしいです

質問者が選んだベストアンサー

OS不明の為、linux前提で回答します。

/home/edinet/E05267/S1001YX6/index.html
このデータの改行がrubyできちんと認識されていないように見えます。
(htmlなのでブラウザでは改行されているように見えるかと思います。)

cat -n /home/edinet/E05267/S1001YX6/index.html
として、行番号付きで表示したとき、きちんと表示されるでしょうか。

例えば、index.htmlが1行で記述されていたなどということはないでしょうか。

提示されたスクリプトは、index.htmlが(rubyから見て)きちんと改行されていることが前提です。

投稿日時 - 2014-11-25 17:27:12

補足

回答ありがとうございます。

調べたところ、確かに改行の数が少なく、長く取得してしまう原因となっているようでした。

そこで対策を取りたいのですが、これは元々のhtmlに置換などで改行文字を与えてやれば良いのでしょうか?
それともRubyの方でまた別のメソッドがあるのでしょうか。
お願いします。

投稿日時 - 2014-11-25 18:17:50

ANo.2

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.3

#2です。
>そこで対策を取りたいのですが、これは元々のhtmlに置換などで改行文字を与えてやれば良いのでしょうか?
もし、それが簡単にできるようでしたら、その方法を推奨します。(1案)

>それともRubyの方でまた別のメソッドがあるのでしょうか。
特に、rubyに簡単にできるメソッドが用意されているわけではありません。
もし、行うとすれば、スクリプトの全面的な作り替えになります。
考えられる方法としては、以下のような方法があります。(2案)
1.index.htmlを全て読み込み、改行を全て削除した文字列を作成する。
2.その文字列に対して、マッチングを行い、希望する文字列を取り出す。

従って、1案を推奨します。
1案を何らかの理由でさけたい場合のみ、2案を行うのがよいかと。

投稿日時 - 2014-11-25 18:52:44

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-