#!/usr/local/bin/perl # ファイル名 $message_file = "c:/pl/kakugen2/message.txt"; $used_message_file = "c:/pl/kakugen2/usedmessage.txt"; # 何行対応か $line = 2; # # メッセージファイル読み込み # if ( !open( IN, $message_file ) ) { print "'$message_file' open failed."; exit(1); } while ( ) { push( @mes, $_ ); } close( IN ); # # 使用済みメッセージファイル読み込み # (ファイルがなくてもよい) # if ( open( IN, $used_message_file ) ) { while ( ) { push( @used_mes, $_ ); } close( IN ); } # # 使用済みメッセージファイルの行数が中途半端の場合には、ファイルと配列に改行を追加する # if ( ( @used_mes % $line ) != 0 ) { if ( !open( OUT, ">>$used_message_file" ) ) { print "'$used_message_file' open failed. (append)"; exit(3); } for ( $i = 0 ; $i < ( @used_mes % $line ) ; $i++ ){ print OUT "\n"; push( @used_mes, "\n" ); } close( OUT ); } # # 読み込んだメッセージから使用済みに含まれているメッセージを抜く # @unused_mes = @mes; top: for ( $i = 0 ; $i < int( @unused_mes / $line ) ; $i++ ) { for ( $j = 0 ; $j < int( @used_mes / $line ) ; $j++ ) { for ( $l = 0 ; $l < $line ; $l++ ) { if ( $unused_mes[ $i * $line + $l ] ne $used_mes[ $j * $line + $l ] ) { last; } } if ( $l == $line ) { splice( @unused_mes, $i * $line, $line ); redo top; } } } # # 未使用メッセージがないなら使用済みメッセージファイルを削除。全メッセージを未使用にする。 # if ( @unused_mes < $line ) { if ( unlink( "$used_message_file" ) != 1 ) { print "'$used_message_file' remove failed.\n"; exit(2); } @unused_mes = @mes; } # # 未使用からランダムで選ぶ # srand; $r = int( rand() * int( @unused_mes / $line ) ); $output_message = ""; for ( $i = 0 ; $i < $line ; $i++ ) { $output_message = ${output_message}."$unused_mes[ $r * $line + $i ]"; } # # 標準出力に出力する # print "$output_message"; # # 使用済みメッセージファイルに追記する(ファイルがないなら新規作成される) # if ( !open( OUT, ">>$used_message_file" ) ) { print "'$used_message_file' open failed. (append)"; exit(3); } print OUT "$output_message"; close( OUT ); exit(0);