• ベストアンサー

指定文字数で文字列を分割し別ページに表示したい

$m ="あいうえおかきくけこ"; と、$mに代入された10文字を5文字で分割し、次ページ前ページに表示したいです。 つまり、こういうこと。 http://~~/aiu.cgiにアクセスすると、「あいうえお」が表示され、http://~~/aiu.cgi?page=2にアクセスすると「かきくけこ」が表示されるといったものです。 どういうプログラムを書けば実現出来ますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

例えば、こんな感じでしょうか。 use strict; use Encode; use utf8; use Getopt::Long; my $page = 1; my $pagelength = "1500"; #表示文字数 my $result = GetOptions( "page=i" => \$page, "pagelength=i" => \$pagelength ); die "page > 0" if $page < 1; die "pagelength > 0" if $pagelength < 1; my $filename = "ログファイル"; my $sts = open my $in, "<", $filename; if ( !$sts ) { print "<p align=\"center\"><font color=\"red\">File error</font></p>"; } else { flock( $in, 1 ); my @data = <$in>; close($in); my $text; foreach (@data) { my ($comment) = split( /,/, $_ ); $text .= $comment; } my $utf8_text = Encode::decode( 'utf8', $text ); my $offset = ( $page - 1 ) * $pagelength; if ( $offset < length $utf8_text ) { my $out = substr $utf8_text, $offset, $pagelength; print Encode::encode( 'utf8', $out ), "\n"; } } 入力ファイルの中身や出力は utf8 を想定しています。

その他の回答 (2)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

1ページに1500文字表示するとしたら、各ページには substr $m, 0*1500, 1500 # 1ベージ目 substr $m, 1*1500, 1500 # 2ページ目 substr $m, 2*1500, 1500 # 3ページ目 ... を表示すればよいのです。 どの辺がわからないのでしょうか。

humu01jp
質問者

補足

このプログラムでサンプルをお願いします。 $pagelength = "1500";#表示文字数 if(!open(IN, "ログファイル")){print "<p align=\"center\"><font color=\"red\">File error</font></p>";}; flock(IN, 1); @data = <IN>; close(IN); foreach ( @data ) { ($comment) = split(/,/,$_); print "$comment"; }

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

use utf8; my $m = "あいうえおかきくけこ"; のような UTF8 化した文字列だと substr $m, 0, 5 # => "あいうえお" substr $m, 5, 5 # => "かきくけこ" になりますが、そういうことでしょうか。

humu01jp
質問者

補足

いや、そうではなくて、一ページの表示文字数を指定し、$m = "あいうえおかきくけこ";をlength($m)で文字数を数えて、それが指定された文字数を越えたなら、指定文字数だけを表示して、それ以降を別のページに表示したいのです。 つまり、index.cgi?page=1にアクセスした時、$mに代入された「あいうえおかきくけこ」から「あいうえお」だけを切り抜いて表示させ、表示されていない「かきくけこ」をindex.cgi?page=2に表示されるようにしたいのです。 例として「小説家になろう」の携帯用小説閲覧ページでは本文が1200~1500字くらいを越えると、いったんそこで区切り、新たにページを生成してそのページに1500字目以降を表示させるプログラムを採用しています。 このような機能を作るにはどうしたらよいですか? 似たようなプログラムで、http://easycgi.xrea.jp/perltips/nextback.htmというのがあります。 これはログファイルに書き込まれたデータの行数を数えて指定行数を越えたら指定行数だけを表示すると同時に前後ページを生成してそのページへアクセスすると指定行数を以降が表示されるというものです。 当方がやりたいのは、これの文字数版なんです。

関連するQ&A