人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

同じ行数 同じ列数の表が入った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で処理すると固まってしまいます

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 8/8件

▽最新の回答へ

1 ● a-kuma3
●250ポイント ベストアンサー

もしかして、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}

takaniiさんのコメント
shの方を実行したところ sed: RE error: illegal byte sequence と出てしまいます mi にてUTF-8 LFでファイルを保存しました

takaniiさんのコメント
air mid2012を使用しております

a-kuma3さんのコメント
>> shの方を実行したところ sed: RE error: illegal byte sequence と出てしまいます << じゃあ、こんな感じで試してみてください。頭に二行追加してます。 >|sh| 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} ||< スクリプトには、上記のコードをコピって貼ってください。

2 ● きゃづみぃ
●0ポイント

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

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

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

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


3 ● oil999
●250ポイント

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

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

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


4 ● にょぶながのげぼえ
●0ポイント

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

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


5 ● ★champion★
●0ポイント

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


1-5件表示/8件
4.前の5件|次5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ