記憶喪失の名無しさん@漫画サロン:ソースコード

戻る

タブ区切りテキスト→テーブルタグ・既出リスト用Perl

表計算ソフトを用いた既出キャラクター一覧表からタブ区切りテキストを生成するAppleScriptドロップレットと、そのタブ区切りテキストから一覧表テンプレをそれぞれ生成するMacJPerlドロップレット、それぞれのソースコードです。

AppleScriptドロップレット


tell application "Finder"
  set ptm to container of alias (path to me) --このドロップレットの存在するフォルダを得る
  set dup to (duplicate item "一覧.cwk" of ptm) --一覧表を複製して得る
  open dup --複製した一覧表を開く 自動的にAppleWorksが起ち上がる
  tell application "AppleWorks 6"
    save using translator "ASCII テキスト" --タブ区切りテキストで保存して
    close --閉じる
  end tell
  try
    delete item "一覧.txt" of ptm --既に"一覧.txt"が存在すれば取り除いておく
  end try
  set creator type of dup to "MMKE" --クリエイタをmiにする
  set name of dup to "一覧.txt" --名称を"一覧.txt"に変更する
  open item "一覧.txt" of ptm using item "txt→テンプレ・一覧表" of ptm --"一覧.txt"をMacJPerlドロップレットで開く
end tell

MacJPerlドロップレット


#!/usr/bin/perl -w
use strict; 
my ($anchor, $cname, $title, $author, $magazine, $thread, $res, @threuri); #開始位置・キャラクター名・題名・作者・掲載誌・スレッド番号・レス番号・スレッドURI配列
my $brleng=length(' <br> '); #改行文字数
my $totallimit=2048-$brleng; #最大byte数=2048-改行
my $head='既出記憶喪失者リスト'; #見出し出題不可キャラリスト
my $headleng=length($head); #見出し文字数
my $header="――――――――――\n\n$head"; #見出し全体=ライン+改行+改行+見出し
my $totalnum=$headleng+1+$brleng; #現在の小計byte数=見出し文字数+見出し連番byte数+改行
my $perlimit=32-1; #最大行数=32-改行
my $pernum=2; #現在行数=2(1行目は見出し)
my $text; #文字列 キャラクター名(題名)/
my $textleng; #文字列のbyte数
my $textlimit=86; #1行あたりの最大byte数=実験の結果
my $textnum=0; #現在行のbyte数を初期化
my $listnum=1; #見出し連番数を初期化
my $trclass=''; #trへのクラス表記を空白で初期化
my $arr='undef  undef
1068090209  記憶喪失 の名無しさん
1068566584  記憶喪失 の名無しさん2
1068820965  記憶喪失の名無しさん 三人目
1074357614  記憶喪失 の名無しさん四人目
1085410917  記憶喪失の名無しさん 五人目
1094239631  記憶喪失の名無しさん 6人目
1099150958  記憶喪失の名無しさん 7人目
1101474076  記憶喪失の名無しさん 八人目
1104196905  記憶喪失の名無しさん 九人目
1110729697  記憶喪失の名無しさん 十人目
1120575654  記憶喪失の名無しさん 十一人目
1131979449  記憶喪失の名無しさん 十二人目
1139542859  記憶喪失の名無しさん 十三人目
1149214801  記憶喪失の名無しさん 十四人目 
1158552468  記憶喪失の名無しさん 十五人目
1163061199  記憶喪失の名無しさん 十六人目
1168233057  記憶喪失の名無しさん 十七人目
1173958584  記憶喪失の名無しさん 十八人目
1181131235  記憶喪失の名無しさん 十九人目
1188008867  記憶喪失の名無しさん 二十人目
1194101381  記憶喪失の名無しさん 二十一人目
undef  undef'; #1行にタブで区切ったURIと題名
foreach(split "\n", $arr){ #$arrを改行で区切った配列を1つずつ処理する
  push(@threuri, (split "\t")[0]); #URIの配列に追加する
}

my $temple='temple.html'; #テンプレ出力ファイル名
open TEMPLE, "> $temple" or die $!; #テンプレ出力
MacPerl::SetFileInfo('MMKE','TEXT' ,$temple); #テンプレファイルタイプ・クリエータ指定
my $atable2tag='atable.html'; #一覧表出力ファイル名
open AT2TAG, "> $atable2tag" or die $!; #一覧表出力
MacPerl::SetFileInfo('MMKE','TEXT' ,$atable2tag); #一覧表ファイルタイプ・クリエータ指定
select TEMPLE; #テンプレがデフォルトになるように出力先切換

open TEMP, "< temple前半.txt" or die $!; #テンプレ前半を開いて
print <TEMP>; #出力
open TEMP, "< atable前半.txt" or die $!; #一覧表前半を開いて
print AT2TAG <TEMP>; #出力

print $header.$listnum++."\n"; #文頭に見出し全体+見出し連番インクリメント+改行を出力
while(<>){#1行ずつ処理する
  chomp; #改行を削除
  ($anchor, $cname, $title, $author, $magazine)=split "\t"; #タブで区切って順番・キャラクター名・題名・作者・掲載誌・開始位置を得る
  last
    unless($cname); #キャラクター名が空ならば終了
#一覧表
  ($thread, $res)=split '-', $anchor; #開始位置をハイフンで区切ってスレッド番号・レス番号を得る
print AT2TAG <<"TR"; #必要なクラスのみ指定してテーブルタグを出力 ヒアドキュメントならば"や/をエスケープしなくてよい
  <tr$trclass><td class="anchor"><a href="$threuri[$thread].html#R$res">$anchor</a></td><td>$cname</td><td>$title</td><td>$author</td><td>$magazine</td></tr>
TR
  print AT2TAG "\t<!-- ' -->\n"
    unless(index($_, "'")==-1); #文字列に'を含んでいたらJavaScriptモードでのテーブルタグの表示を整えるため'をコメントに包んで出力する
#テンプレ
  $text="$cname〈$title〉/"; #キャラクター名(題名)/
  $textleng=length($text); #文字列のbyte数を得る
  if($totalnum+$textleng>$totallimit or ($pernum==$perlimit and $textnum+$textleng>$textlimit)){ #その文字列のbyte数を加えた小計が最大byte数を超えている、もしくは現在最大行数行目でその文字列のbyte数を加えた現在行のbyte数が1行あたりの最大byte数を超えているならば
    print "\n\n$header".$listnum++."\n$text";  #改行+改行+見出し全体+見出し連番インクリメント+改行+文字列を出力
    $totalnum=$headleng+length($listnum)+$brleng+$textleng; #現在の小計byte数=見出し+見出し連番数+改行+文字列、のbyte数
    $textnum=$textleng; #現在行のbyte数=文字列のbyte数
    $pernum=2; #現在行数を初期化
  }elsif($textnum+$textleng>$textlimit){ #文字列+現在行、のbyte数が1行あたりの最大byte数を超えているならば
    print "\n$text"; #改行+文字列を出力
    $totalnum+=$textleng+$brleng; #小計に文字列+改行のbyte数を加える
    $textnum=$textleng; #現在行のbyte数=文字列のbyte数
    $pernum++; #現在行数をインクリメント
  }else{
    print $text; #文字列を出力
    $totalnum+=$textleng; #小計に文字列のbyte数を加える
    $textnum+=$textleng; #現在行のbyte数に文字列のbyte数を加える
  }
}
print "\n\n――――――――――\n"; #テンプレ文末に改行+改行+ライン+改行を出力

open TEMP, "< temple後半.txt" or die $!; #テンプレ後半を開いて
print <TEMP>; #出力
open TEMP, "< atable後半.txt" or die $!; #一覧表後半を開いて
print AT2TAG <TEMP>; #出力

現行スレッドリンク用JavaScript

一覧表からのリンクはhtmlファイル化したログを想定しています。従って現行スレッド向けにはうまくリンクされません。そこでJavaScriptで2chの現行スレッドに飛ばしています。


<script type="text/javascript">
<!--
location.href='http://comicx.2ch.net/test/read.cgi/csaloon/xxxxxxxxxx/'+location.hash.substring(2)+'-'; 
// -->
</script>
<noscript>
<p><a href="http://comicx.2ch.net/test/read.cgi/csaloon/xxxxxxxxxx/l50" title="記憶喪失の名無しさん ○○人目">記憶喪失の名無しさん ○○人目</a></p>
</noscript>

一覧表用JavaScript

一覧表の後半に直書きされています。

戻る

纏め人:2006-12-06 作成/ 2007-02-13 更新
無料レンタル無料ホームページ無料オンラインストレージ