次へ: 6.4 Copyright 以下の部分の取得部分 上へ: 6 各部分の構成 前へ: 6.2 見出し部分の取得部分 (PDF ファイル: awkhtml.pdf)

6.3 記事本文の取得部分

次は、3 節の 3. の部分の取得ですが、 これは、上と同じように考えて ``OUTLINE_TABLE'' というキーワードをまずは目印にすればいいのですが、 実はこのキーワードはこの HTML ファイル中で何回か使用されているので、 単純に同じようにはできません。

記事本文は、そのうち最初の ``OUTLINE_TABLE'' の後に出てくるので、 それが最初の物であるかを調べることにして以下のようにすればいいでしょう。

  ##### 記事本文の取得 #####
  # N_ot = 何回目の OUTLINE_TABLE ブロックであるかを保持
  ($0 ~ / OUTLINE_TABLE/){ N_ot++ }
  # 最初の OUTLINE_TABLE ブロックのときだけ以下を実行
  (N_ot==1 && $0 ~ / OUTLINE_TABLE/){
      # 不要な部分を読み飛ばし
      while($0 !~ /<font size/)
        if(getline<=0){ errorexit=5; exit }
      # 本文の保存 (body[1] ~ body[N_body])
      N_body=0
      do{
          if($0 ~ /<\/?font/) gsub(/<\/?font[^>]*>/,"")
          body[++N_body]=$0
          if(getline<=0){ errorexit=6; exit }
      }while($0 !~ /<div/)
      # 本文の最後の <div> タグ部分を改行 (<br>) に変換して保存
      sub(/<div[^>]*>/,"<br>")
      body[++N_body]=$0
      # </div> までを保存
      while($0 !~ /<\/div/){
          if(getline<=0){ errorexit=7; exit }
          body[++N_body]=$0
      }
      # </div> タグは単に削除
      sub(/<\/div>/,"",body[N_body])
      next
  }
このように N_ot という変数に何回目の OUTLINE_TABLE ブロック であるかを保存することで、 最初の OUTLINE_TABLE ブロックだけに実行させることが できるようになります。

本文の font タグは削除し、div タグは <div ...> は改行 (<br>) に変換し、 </div> は削除し、本文全体を body という配列に保存しています。


次へ: 6.4 Copyright 以下の部分の取得部分 上へ: 6 各部分の構成 前へ: 6.2 見出し部分の取得部分
竹野茂治@新潟工科大学
2006年8月14日