日本語プログラム言語「なでしこ」板

このエントリーをはてなブックマークに追加
547アンケート自動集計ver.3 (1/6)
#
# NHK-BSアンケート自動集計プログラム
# 【調査対象】 http://www.nhk.or.jp/bsdebate/0506/mail_01.html
# 【内容】 上記サイトのアンケートを収集しエクセルに出力します。
#      「TABLES」シート・・・投稿数,人数といった統計情報を記録。
#      「TEXT」シート・・・投稿者情報,投稿本文といった投稿内容を記録。
# 【制約】 OS:Windows、インターネット接続環境、エクセル必要
# 【使用方法】 日本語プログラミング言語「なでしこ」をダウンロードし、
#      下記プログラムを実行します。データ転送中にエクセルのセルを
#      クリックすると、エラーが発生する恐れがあるためご注意ください。
# 【使用言語】日本語プログラミング言語「なでしこ」
#      公式サイト http://www.nadesi.com
# 【注1】パーセントは小数点以下切り捨てで表記しました。
# 【注2】氏名・性別が同一の複数投稿は一人と見なしました。
# 【注3】複数投稿の場合、その人物の親近感は最新の投稿を反映しました。

元URLは「http://cgi2.nhk.or.jp/bsdebate/cgi-bin/cgi_svr/view_opinion_detail.cgi?themeid=26&itemid=119&recid=
住所一覧は「■北海道{~}北海道{~}■東北{~}青森県{~}岩手県{~}宮城県{~}秋田県{~}」&,
「山形県{~}福島県{~}■関東{~}東京都{~}神奈川県{~}埼玉県{~}千葉県{~}茨城県{~}」&,
「栃木県{~}群馬県{~}山梨県{~}■信越{~}新潟県{~}長野県{~}■北陸{~}富山県{~}」&,
「石川県{~}福井県{~}■東海{~}愛知県{~}岐阜県{~}静岡県{~}三重県{~}■近畿{~}」&,
「大阪府{~}兵庫県{~}京都府{~}滋賀県{~}奈良県{~}和歌山県{~}■中国{~}鳥取県{~}」&,
「島根県{~}岡山県{~}広島県{~}山口県{~}■四国{~}徳島県{~}香川県{~}愛媛県{~}」&,
「高知県{~}■九州{~}福岡県{~}佐賀県{~}長崎県{~}熊本県{~}大分県{~}宮崎県{~}」&,
「鹿児島県{~}■沖縄{~}沖縄県{~}■他{~}」
投稿数とは整数。結果とはハッシュ。それは「」
住所一覧を反復
  結果@「投稿数」@「{対象}」=0
  結果@「<感じる>」@「{対象}」=0
  結果@「<感じない>」@「{対象}」=0
ハンドル別投稿数とはハッシュ。それは「」
548アンケート自動集計ver.3 (2/6):2005/06/19(日) 19:05:52
オンでエクセル起動。エクセル新規ブック。『%OHRTABLES{ENTER}』をキー送信
「A1」へ「投稿数{~}男性投稿{~}女性投稿{~}好感投稿{~}不快投稿{~}{~}人数{~}男性人数{~}」&,
「女性人数{~}好感人数{~}不快人数{~}{~}世代{~}10歳未満{~}10代{~}20代{~}30代{~}40代{~}」&,
「50代{~}60代{~}70代{~}80代{~}90代{~}100代」をエクセル一括設定
「B13」へ「好感人数,不快人数」をエクセル一括設定
「A26」へ「住所,好感人数,不快人数,,住所,投稿数,,投稿数,投稿人数,,投稿数,ハンドル (性別),,親しみ」をエクセル一括設定
「Sheet3」のエクセルシート注目。『%EL』をキー送信
「Sheet2」のエクセルシート注目。『%OHRTEXT{ENTER}』をキー送信
「A1」へ「番号,氏名,性別,年齢,住所,親しみ,題名,本文」をエクセル一括設定
「A2:H2」をエクセル選択。『%WF』をキー送信
「A2」へ「インターネットへ接続します・・・」をエクセルセル設定
「H1」をエクセル選択。『%DFF%OCW55{ENTER}』をキー送信

オンの間
  URLは元URL&回数
  HTMLはURLのHTTPデータ取得して、それをSJIS変換
  条件は『g">(\d{1,4})\s*((?:(?!</).)+)』
  HTMLを条件で正規表現マッチ
  番号は抽出文字列[0]。もし、回数が1ならば、投稿数は番号
  題名は抽出文字列[1]
  データはHTMLから『span』のタグ切出
  親近感はデータ[0]のタグ削除して空白除去
  データ[1]のタグ削除を『.([^ ]+).(男|女).(\d{1,3}才).(.*)』で正規表現マッチ
  「氏名{~}性別{~}年齢{~}住所」を反復
    「{対象}は抽出文字列[{回数-1}]」をナデシコする
  世代はINT(年齢/10)*10&「代」
  データ[2]の『<br>』を「{~}」へ正規表現置換してタグ削除して本文に代入
  「題名{~}本文」を反復
    「{対象}の『[&]quot;』を『"』へ正規表現置換して{対象}に代入。」&,
    「{対象}の『[&]#39;』を『'』へ正規表現置換して{対象}に代入。」&,
    「{対象}の『[&]lt;』を『<』へ正規表現置換して{対象}に代入。」&,
    「{対象}の『[&]gt;』を『>』へ正規表現置換して{対象}に代入」をナデシコする
549アンケート自動集計ver.3 (3/6):2005/06/19(日) 19:06:48
  # インデント(字下げ)注意!
  行=回数+1
  「A,番号{~}B,氏名{~}C,性別{~}D,年齢{~}E,住所{~}F,親近感{~}G,題名{~}H,本文」をCSV取得して反復
    2のエクセルシート注目
    「{[}{対象[0]}{行}{]}へ{対象[1]}をエクセルセル設定」をナデシコする
  結果@「投稿数」@「{親近感}」=結果@「投稿数」@「{親近感}」+1
  結果@「投稿数」@「{性別}」=結果@「投稿数」@「{性別}」+1
  結果@「投稿数」@「{住所}」=結果@「投稿数」@「{住所}」+1
  ハンドル別投稿数@「{氏名} ({性別})」=ハンドル別投稿数@「{氏名} ({性別})」+1
  もし、ハンドル別投稿数@「{氏名} ({性別})」=1ならば、
    結果@「{親近感}」@「{性別}」=結果@「{親近感}」@「{性別}」+1
    結果@「{親近感}」@「{世代}」=結果@「{親近感}」@「{世代}」+1
    結果@「{親近感}」@「{住所}」=結果@「{親近感}」@「{住所}」+1
    結果@「{氏名} ({性別})」=親近感
  もし、住所一覧を「{~}{住所}{~}」で正規表現マッチが「」ならば、住所一覧は住所一覧&「{住所}{~}」
  2のエクセルシート注目
  「A{行}」をエクセル選択
  もし、回数が投稿数ならば、抜ける

男性投稿=結果@「投稿数」@「男」
女性投稿=結果@「投稿数」@「女」
男性投稿割合=INT(男性投稿/投稿数*100)
女性投稿割合=INT(女性投稿/投稿数*100)
好感投稿=結果@「投稿数」@「<感じる>」
不快投稿=結果@「投稿数」@「<感じない>」
好感投稿割合=INT(好感投稿/投稿数*100)
不快投稿割合=INT(不快投稿/投稿数*100)
男性人数=結果@「<感じる>」@「男」+結果@「<感じない>」@「男」
女性人数=結果@「<感じる>」@「女」+結果@「<感じない>」@「女」
550アンケート自動集計ver.3(4/6):2005/06/19(日) 19:07:27
人数=男性人数+女性人数
男性割合=INT(男性人数/人数*100)
女性割合=INT(女性人数/人数*100)
好感人数=結果@「<感じる>」@「男」+結果@「<感じる>」@「女」
不快人数=結果@「<感じない>」@「男」+結果@「<感じない>」@「女」
好感人数割合=INT(好感人数/人数*100)
不快人数割合=INT(不快人数/人数*100)
1のエクセルシート注目
「B1」へ「{投稿数}通{~}{男性投稿}通 ({男性投稿割合}%){~}」&,
「{女性投稿}通 ({女性投稿割合}%){~}{好感投稿}通 ({好感投稿割合}%){~}」&,
「{不快投稿}通 ({不快投稿割合}%){~}{~}{人数}人{~}{男性人数}人 ({男性割合}%){~}」&,
「{女性人数}人 ({女性割合}%){~}{好感人数}人 ({好感人数割合}%){~}」&,
「{不快人数}人 ({不快人数割合}%)」をエクセル一括設定
1のエクセルシート注目
「D10」へ「好感男性,{結果@『<感じる>』@『男』}人,好感女性,{結果@『<感じる>』@『女』}人{~}」&,
「不快男性,{結果@『<感じない>』@『男』}人,不快女性,{結果@『<感じない>』@『女』}人」をエクセル一括設定
11回
  世代は「{(回数-1)*10}代」
  好感人数=結果@「<感じる>」@「{世代}」。もし、好感人数が「」ならば、好感人数=0
  不快人数=結果@「<感じない>」@「{世代}」。もし、不快人数が「」ならば、不快人数=0
  世代人数=好感人数+不快人数
  好感割合=INT(好感人数/世代人数*100)
  不快割合=INT(不快人数/世代人数*100)
  1のエクセルシート注目
  「B{13+回数}」へ「{好感人数}人 ({好感割合}%),{不快人数}人 ({不快割合}%)」をエクセル一括設定
地域積算一覧は「1,1{~}3,6{~}10,8{~}19,2{~}22,3{~}26,4{~}31,6{~}38,5{~}44,4{~}」&,
「49,7{~}57,1{~}59,{住所一覧の要素数-59}」
住所別投稿表は「」
551アンケート自動集計ver.3(5/6):2005/06/19(日) 19:08:07
住所一覧を反復
  表示済みは、いいえ
  住所は対象。住所ID=回数。行=回数+26
  住所の「^([^■])」を「 \1」へ正規表現置換して住所に代入
  もし、回数が59以下ならば、
    住所の「(?:県|府)」を「」に正規表現置換して住所に代入
    住所の「東京都」を「東京」に正規表現置換して住所に代入
  1のエクセルシート注目
  「A{行}」へ住所をエクセルセル設定。「A{行}」をエクセル選択
  地域積算一覧をCSV取得して反復
    もし、住所IDが対象[0]ならば、
      好感人数=0。不快人数=0
      対象[1]回
        好感人数=好感人数+結果@「<感じる>」@「{住所一覧[住所ID+回数-1]}」
        不快人数=不快人数+結果@「<感じない>」@「{住所一覧[住所ID+回数-1]}」
      好感割合=INT(好感人数/(好感人数+不快人数)*100)
      不快割合=INT(不快人数/(好感人数+不快人数)*100)
      1のエクセルシート注目
      「B{行}」へ「{好感人数}人 ({好感割合}%),{不快人数}人 ({不快割合}%)」をエクセル一括設定
      表示済みは、はい
  もし、表示済みがいいえならば、
    好感人数=結果@「<感じる>」@「{対象}」
    不快人数=結果@「<感じない>」@「{対象}」
    もし、好感人数が「」ならば、好感人数=0
    もし、不快人数が「」ならば、不快人数=0
    好感割合=INT(好感人数/(好感人数+不快人数)*100)
    不快割合=INT(不快人数/(好感人数+不快人数)*100)
    1のエクセルシート注目
    「B{行}」へ「{好感人数}人 ({好感割合}%),{不快人数}人 ({不快割合}%)」をエクセル一括設定
    投稿数=結果@「投稿数」@「{対象}」
    住所別投稿表=住所別投稿表&「{住所},{投稿数}通{~}」
552アンケート自動集計ver.3(6/6):2005/06/19(日) 19:10:51
住所別投稿表の1を表数値ソート
「ソート住所,E{~}ソート投稿数,F」をCSV取得して反復
  「{対象[0]}は住所別投稿表の{回数-1}を表列取得。{対象[0]}を配列逆順」をナデシコする
  1のエクセルシート注目。「E26」をエクセル選択
  「{[}{対象[1]}27{]}へ{対象[0]}をエクセル一括設定」をナデシコする

一覧は「」
ハンドル別投稿数のハッシュキー列挙を反復
  一覧にハンドル別投稿数@「{対象}」を配列追加

最大投稿数=一覧の配列最大値。上位=0。投稿別人数は「」。投稿ランキングは「」
最大投稿数 回
  投稿数=最大投稿数−(回数−1)
  一覧の0から投稿数を表ピックアップして、それの要素数を人数に代入
  投稿別人数=投稿別人数&「{投稿数}通,{人数}人{~}」
  
  もし、投稿数>3ならば、
    ハンドル別投稿数のハッシュキー列挙を反復
      もし、ハンドル別投稿数@「{対象}」=投稿数ならば、
        投稿ランキング=投稿ランキング&「{投稿数}通,{対象},,」&(結果@「{対象}」)&「{~}」

投稿別人数を配列逆順。1のエクセルシート注目
「H26」をエクセル選択。1のエクセルシート注目。「H27」へ投稿別人数をエクセル一括設定
「K26」をエクセル選択。1のエクセルシート注目。「K27」へ投稿ランキングをエクセル一括設定
「B1」をエクセル選択
おわり