#Perl のプログラムのファイルで「;」の抜けていそうな行を探し出すプログラム
#2002,10,30一応完成
#コメント行をOKにする方法で苦労した
#普通は使わないが、全角スペースで始まるコメント行がチェックリストに入る
#
#プログラムをチェックしようと思って、プログラムを作ろうと考えた。
#本当はスカラー・配列・ハッシュっぽいやつで、始めに"$""@""%"の抜けているものも
#チェックするものを作りたかったが、勉強不足のため今回はあきらめた。
#しかし、文字列の正規表現をもっと勉強した後には、作ろうと思う(いつのことやら)。

#ファイルを開く-----------------------------------------------------------------
print"チェックするファイルは？";
chomp($file_in=<STDIN>);

while(not -e $file_in) {
	print"ファイルがありません\n";
	print"チェックするファイルは？";
	chomp($file_in=<STDIN>);
}
	open IN ,$file_in;
#-------------------------------------------------------------------------------

#出力するファイルを新規作成する-------------------------------------------------
$file_out="$file_in"."_result";
open OUT,">$file_out";
#-------------------------------------------------------------------------------

#チェックと出力-----------------------------------------------------------------
print OUT "次の行は\";\"を含んでいないので、要チェックです。\n";
print OUT "行番号\t行の内容です。\n";

$line_number=0;			#カウンタ初期設定
$number_of_check=0;		#カウンタ初期設定

loop:while ($line = <IN>){
	$line_number++;
	chomp $line;			#$line の末尾の改行コードを削除する

	if ($line eq "") {	#空白行はOK
	next loop;
	}

	if ($line=~m/{/) {		#"{"を含む行はOK
	next loop;
	}

	if ($line=~m/}/) {		#"}"を含む行はOK
	next loop;
	}

	if ($line=~m/;/) {		#";"を含む行はOK
	next loop;
	}

	if ($line=~m/\A\s*#/) {	#"#"あるいは"空白文字+#"ではじめる行はOK
	next loop;
	}

	if ($line=~m/\s*/) {	#空白文字を含む行はOK
		if($line=~m/\S*/) {	#ただし、空白文字以外を含む場合はダメ
			print OUT "$line_number\t$line\n";
			$number_of_check++;		#チェックした回数を数える
			next loop;
		}
		next loop;
	}

	print OUT "$line_number\t$line\n";
	$number_of_check++;		#チェックした回数を数える
}

#-------------------------------------------------------------------------------

#ファイルを閉じる--------------------------------------------------------------
close IN;
close OUT;
#-------------------------------------------------------------------------------

#チェック数が0の場合は出力ファイルを消去する------------------------------------
if ($number_of_check==0) {
	print "\";\"が抜けているところはなさそうです。\n";
	unlink $file_out;
}else{
print "\";\"の抜けているところがありそうです。\n";
print "$file_out を見てください。\n";
}
#-------------------------------------------------------------------------------
