同じ行数 同じ列数の表が入ったhtmlファイルが複数あるのですが

あるフォルダの中に入れたhtmlファイルを名前順に結合後
正規表現で、中間の<html><head><title>〜</title></head><body></body></html>等の不要なタグを削除し、先頭部分に<html><body> おしりの部分に</body></html> を追加して1つの表が結合されたhtmlファイルを出力するプログラムを作りたいのですが、どの言語を使うのが適切でしょうか?
フリーソフトのファイル結合ソフトを使い結合すると
<html><head><title>〜</title></head><body></body></html>の部分が残ったまま結合されてしまいます。
テキストエディターの置換機能等で削除するにはあまりにも結合ファイル数が多すぎます
表の行数と列数が大きすぎるのでDREAMWEAVERなどのGUIで処理すると固まってしまいます

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/02/22 03:49:55
  • 終了:2013/03/01 03:50:03

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4440ベストアンサー獲得回数18242013/02/22 08:45:02

ポイント250pt

もしかして、Mac 使いでいらっしゃる?
であれば、unix のコマンドが使えるので、スクリプトでやっちゃうのが良いと思います。

例えば、こんな感じの HTML ファイルがあるとして、<table> から </table> までを切り出してくっつける、とした場合。

<html>
<head>
<title></title>
</head>
<body>
<table>
<tr>
<td>111</td>
<td>222</td>
</tr>
</table>
</body>
</html>

以下のようなテキストファイルを作ります。

SOURCE_DIR=source
OUTPUT=output.html

echo "<html><body>" > ${OUTPUT}
sed -n -e "/<table>/,/<\/table>/p" ${SOURCE_DIR}/*.html >> ${OUTPUT}
echo "</body></html>" >> ${OUTPUT}

頭の方に書いてある source は、元になる HTML ファイルが置いてあるディレクトリ、output.html は結合後の HTML ファイルの名前です。
このファイルを、combine.sh という名前で保存したとして、ターミナルから以下のようなコマンドを実行します。

% sh combine.sh

頭の % は、プロンプトです(ということまでは、説明しなくて良いかな)。


さっきのプログラム(正確には、シェルスクリプト)では、元になるファイルを読み込みながら、随時書き足していくような動作をするので、元になるファイルの数が多かろうが、サイズが大きかろうが、メモリ不足になることはありません(時間はかかりますけどね)。




追記です。
同じくシェルスクリプトですが、awk で書いたものです。
元になる HTML の作りによっては、こちらのほうが柔軟に対応できるかもしれません。

SOURCE_DIR=source
OUTPUT=output.html

awk '
BEGIN { print "<html><body>"; output = 0; }
END { print "</body></html>" }
/<table>/ { output = 1 }
output == 1 { print }
/<\/table>/ { output = 0 }
' ${SOURCE_DIR}/*.html > ${OUTPUT}
他1件のコメントを見る
id:takanii

air mid2012を使用しております

2013/02/22 20:37:09
id:a-kuma3

shの方を実行したところ
sed: RE error: illegal byte sequence
と出てしまいます


じゃあ、こんな感じで試してみてください。頭に二行追加してます。

LANG=C
NOLOCALE=1
SOURCE_DIR=source
OUTPUT=output.html

echo "<html><body>" > ${OUTPUT}
sed -n -e "/<table>/,/<\/table>/p" ${SOURCE_DIR}/*.html >> ${OUTPUT}
echo "</body></html>" >> ${OUTPUT}

スクリプトには、上記のコードをコピって貼ってください。

2013/02/22 21:57:19

その他の回答(7件)

id:a-kuma3 No.1

a-kuma3回答回数4440ベストアンサー獲得回数18242013/02/22 08:45:02ここでベストアンサー

ポイント250pt

もしかして、Mac 使いでいらっしゃる?
であれば、unix のコマンドが使えるので、スクリプトでやっちゃうのが良いと思います。

例えば、こんな感じの HTML ファイルがあるとして、<table> から </table> までを切り出してくっつける、とした場合。

<html>
<head>
<title></title>
</head>
<body>
<table>
<tr>
<td>111</td>
<td>222</td>
</tr>
</table>
</body>
</html>

以下のようなテキストファイルを作ります。

SOURCE_DIR=source
OUTPUT=output.html

echo "<html><body>" > ${OUTPUT}
sed -n -e "/<table>/,/<\/table>/p" ${SOURCE_DIR}/*.html >> ${OUTPUT}
echo "</body></html>" >> ${OUTPUT}

頭の方に書いてある source は、元になる HTML ファイルが置いてあるディレクトリ、output.html は結合後の HTML ファイルの名前です。
このファイルを、combine.sh という名前で保存したとして、ターミナルから以下のようなコマンドを実行します。

% sh combine.sh

頭の % は、プロンプトです(ということまでは、説明しなくて良いかな)。


さっきのプログラム(正確には、シェルスクリプト)では、元になるファイルを読み込みながら、随時書き足していくような動作をするので、元になるファイルの数が多かろうが、サイズが大きかろうが、メモリ不足になることはありません(時間はかかりますけどね)。




追記です。
同じくシェルスクリプトですが、awk で書いたものです。
元になる HTML の作りによっては、こちらのほうが柔軟に対応できるかもしれません。

SOURCE_DIR=source
OUTPUT=output.html

awk '
BEGIN { print "<html><body>"; output = 0; }
END { print "</body></html>" }
/<table>/ { output = 1 }
output == 1 { print }
/<\/table>/ { output = 0 }
' ${SOURCE_DIR}/*.html > ${OUTPUT}
他1件のコメントを見る
id:takanii

air mid2012を使用しております

2013/02/22 20:37:09
id:a-kuma3

shの方を実行したところ
sed: RE error: illegal byte sequence
と出てしまいます


じゃあ、こんな感じで試してみてください。頭に二行追加してます。

LANG=C
NOLOCALE=1
SOURCE_DIR=source
OUTPUT=output.html

echo "<html><body>" > ${OUTPUT}
sed -n -e "/<table>/,/<\/table>/p" ${SOURCE_DIR}/*.html >> ${OUTPUT}
echo "</body></html>" >> ${OUTPUT}

スクリプトには、上記のコードをコピって貼ってください。

2013/02/22 21:57:19
id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982013/02/22 16:01:14

タグを全部なしに置換するならば 秀丸のgrep置換とかやったほうが便利でしょう。

<.*?>
を なにもないものに 置換します。
正規表現にチェックを入れます。

それから 結合すればいいです。

もしくは結合したら、一括で置換です。

id:oil999 No.3

oil999回答回数1728ベストアンサー獲得回数3202013/02/22 20:08:13

ポイント250pt

sedを使えば正規表現で簡単に削除できます。

Linuxであれば標準コマンドとして用意されています。

Windows用sed
http://www.vector.co.jp/soft/win31/util/se030822.html

id:nyobunaga618 No.4

にょぶながのげぼえ回答回数33ベストアンサー獲得回数22013/02/23 14:09:49

oil999sと同じく私もsedがいいと思います。

あまり難しいことはわかりませんが、使いやすいと…思います。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/

id:ttakato No.5

★champion★回答回数93ベストアンサー獲得回数72013/02/24 22:58:31

僕は、Macをおすすめしますね!!a-kuma3さんと同じやり方で。

id:nikodesu No.6

ニコ回答回数1025ベストアンサー獲得回数392013/02/28 08:13:00

これは評判いいので一度試してみたはいかがでしょう。
http://kompozer.cssmaid.net/

id:boost_beast No.7

boost_beast回答回数785ベストアンサー獲得回数312013/02/28 23:03:31

ポイント250pt

http://www.shoshinsha.com/hp/tools/substi.htm

こちらはどうでしょうか。

id:nikodesu No.8

ニコ回答回数1025ベストアンサー獲得回数392013/03/01 00:17:14

ポイント250pt

これはちょっと面白い。
http://japan.zdnet.com/development/sp/35008062/

  • id:windofjuly
    うぃんど 2013/02/22 04:50:51
    どのような言語を使おうとも結局のところ、
    それほど大きな違いはなかったりしますよ。

    そんなことよりも、
    そのデータを最終的にどのように加工すれば利用しやすいのかが問題でしょう。

    1つのファイルに結合しつつ不要部分を削るだけであれば、
    VBS(Windows)やperl(Mac)など様々な方法で対応出来ますが、
    DREAMWEAVERが落ちるほどに大きな表を、
    DB化などすることもなく1つの巨大なHTMLファイルの形で使うのですか?

    例えば、VBAで順にAccessのテーブルに読み込むとか、
    収まるならばVBAでExcelワークシートに読み込むとか、
    フリーソフトがよければSQLite3標準装備のphpで…など、別の方法は必要ありませんか?

    テーブルのデータをどのように取り扱いたいのかをよくよく考えて、
    どのように加工すべきかを考え直すことを第一にすることをお勧めしますよ。

    それでもなおHTML1つにしておきたいなら、それはそれで結構ですが、
    いずれにしてもMacかWindowsかといった動作環境の指定や、
    HTML元データと完成データのサンプルの準備と開示など、
    詳細な検討に作業に必要な資料を揃えてください。

    それから…、1000ポイントスタートはムダになる可能性も高いので、
    キャンセルして質問をやりなおしても私はかまいません。あわせて検討してみてください。
  • id:takanii
    ご有用な回答有り難うございます。こちらではポイントが配布できませんので是非ともコピペでも構いませんので解答欄の方にご入力しておいてください。
  • id:windofjuly
    うぃんど 2013/02/22 05:12:35
    無料化導入以前からコメントで事前やり取りするクセがついてますので必要な情報が揃ってから検討します。
  • id:Yoshiya
    1.文字列置換ソフトを使って、最初に不要タグを取り除いた後、残ったHTMLファイルを結合。
    2.その後に結合したHTMLファイルにタグを手で挿入。

    これで行けると思いますけど。
    どうしても自動化をするのであれば、windofjulyさんが前述している様に、VBAやPHPなどのプログラミング言語を使う方がいいですね。
    (私だったらVBAかコマンドラインで動くC言語かなあ。)
  • id:taknt
    これって bodyの中身だけ連結したいということでしょうか?

    それとも <html><head><title></title></head><body></body><html>のタグだけ消去でしょうか?


    <html>~</html>だと 全部になっちゃいますからね。

    <head>の中身を消去するのが いいのかな?

  • id:maya70828
    どうでもいいけどハイクで噂の回答者が・・・
    これは質問者のモチベーションが下がること間違いなしだな。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません