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

締切り済みの質問

テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラム

テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラムを教えてください。
(Perl/Ruby/Pythonのいずれかで)

テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラムを教えてください。
(Perl/Ruby/Pythonのいずれかで)

手元にあるテキストファイルを指定の行数(もしくは文字数)で分割しHTMLファイルにしたいと考えています。
[sample.txt(10分割)→1.html~10.html]

フリーの分割ソフトはあるようですが
・分割とHTML化を同時にしたい
・ページ下部にファイルに対応したページ番号がつけたい
 (1.htmlの下部に:<p>1ページ</p>のようなイメージ)
・最近プログラミングの勉強をしていていろんなコードを見てみたい
という理由で利用しないつもりです。

何卒よろしくお願いいたします。

投稿日時 - 2007-11-02 12:08:46

QNo.3482634

困ってます

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

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

回答(3)

ANo.3

Python版です。2.5からの機能を使えばもうちょっと簡潔にできそうなきもしますが、
まだそれに慣れておりませんので使いませんでした。
Pythonスクリプトは行頭の空白が消えるととても悲しいことになるので、
_ で置き換えています。試す際にはコピペの後でスペースに置換してください。

iimport sys

def take_nlines(fp, n=100):
____while True:
________#l = [fp.next() for x in range(1, n+1)]
________l = []
________for i in range(1, n+1):
____________try:
________________l.append(fp.next())
____________except StopIteration:
________________yield l
________________raise StopIteration
________yield l

### main ###
fp = open(sys.argv[1])
idx = 1

for content in take_nlines(fp):
____try:
________ofname = "%d.html" % (idx, )
________ofp = open(ofname, 'w')
________ofp.writelines(content)
________ofp.close
____except :
________print "Unexpected error:", sys.exc_info()[0]
________raise

____idx += 1

fp.close()

三つのどれもわかりやすさ最優先で書いたわけではないので、なにか疑問な点があれば
遠慮なく補足欄で質問してください。

投稿日時 - 2007-11-03 02:37:42

お礼

ありがとうございます。
Pythonはインデントが大事って言いますもんね。
これを機に勉強したいと思います。

投稿日時 - 2007-11-04 00:40:22

ANo.2

えーと、それじゃあ分割のところだけわかればいいですか?
こんな感じでどうでしょう。
1.html, 2.html, ... に100行ごとに切り分けます。
行数などは適当に修正してください。

とりあえずPerlとRubyで。
興が乗ったらあとでPythonでもやってみます。

use strict;

my $linecount = 100;
my $file = shift;

open my $fh, '<', $file or die "can't open $file($!)\n";
my @content = <$fh>;
close $fh;

my $idx = 1;
while (@content) {
my $outfile = $idx . ".html";
open my $ofh, '>', $outfile or die "can't open $file($!)\n";
print $ofh splice @content, 0, $linecount;
close $ofh;
$idx++;
}

#####
f = ARGV.shift
linecount = 100
idx=1
open(f) do |io|
lines = io.readlines
while (chunk = lines.slice!(0, linecount)).length > 0
open(idx.to_s + '.html', 'w') {|of| of.write chunk}
idx += 1
end
end

投稿日時 - 2007-11-02 21:08:36

お礼

回答ありがとうございました。
Perl/Ruby/Python全てを嗜んでおられるとは凄いですね。
見習って私も取得に励みます。
分割プログラム早速試してみます!

投稿日時 - 2007-11-02 22:14:07

ANo.1

テキストファイルのHTML化って具体的には何をするんですか?
たぶん分割してできたファイルの拡張子を .htmlにするだけではないですよね。

投稿日時 - 2007-11-02 12:24:57

補足

コメントありがとうございます。
説明不足で申し訳ありません。

作成した文書をアップして携帯電話で読めるようにしたいのです。
1ページで表示すると量が多いので何ページかに分割たいのです。

あらかじめHTMLのテンプレートを作ってあるので
分割したテキストをそこに埋め込みたいと思っています。
またファイルのナンバーにあわせて前後へのリンクを作る予定ではありますが
この部分に関しては自分で追加できると考えているのであえて質問にはあげませんでした。

例)2.htmlの場合

<html>
<テンプレート>

分割したテキスト:2番目(改行の必要なし)

<テンプレート>

<a href="1.html" accesskey="">1.前へ</a> 2ページ  <a href="2.html" accesskey="3">3.次へ</a>

</html>

投稿日時 - 2007-11-02 12:51:50

あなたにオススメの質問