[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:321) ファイル分割



オモテにあるファイル分割のスクリプトとちと書き換えました。
ご連絡程度ですが。


#!/usr/local/bin/perl

#ファイル分割
#●Copy Right;
#このScriptは無断配布禁止です。
#著作権は市川せうぞーに帰属します
#(c)Show Ichikawa Copy Right 1999-2002
#	ym3s-ickw@asahi-net.or.jp
#	http://www.seuzo.jp/
#●History;
#v1.0.0	1999.04.01	飯田重規さんのスクリプトから想を得た
#v1.1.0	2002.10.04	デリミタ行を削除できるようにしました。


#ダブルクリックされたら説明を表示
unless (@ARGV) {#ダブルクリックされた
&MacPerl'Answer(<<'mess');
ファイルを指定されたデリミタで分割します。
ファイルをドラッグ&ドロップしてください。
mess
exit;#プログラムの終了
}

exit unless $delimiter = &MacPerl'Ask ("ファイルの区切り文字を入力してください", '::::::');
$del_f = &MacPerl'Answer("デリミタ行を削除しますか?", "削除する", "残す");


#●入力部
foreach $ARGV (@ARGV) {
	#初期化
	$count = 0;#デリミタ行のカウンタ
	$file_name = '';#ファイル名
	$print_buf = '';#プリントバッファ

	open(INPUT, "$ARGV") || die "can't open $ARGV $!\n";
	while (<INPUT>) {
		if (/^${delimiter}/) {#デリミタ行があった
			if ($print_buf) {&print_out;}
			chomp($file_name = $_);#ファイル名を格納
			$file_name =~ s/^${delimiter}//o;
			if ($file_name =~ /:/) {
				$file_name =~ s/.+:([^:]+)$/$1/;
			}
			if (length($file_name) > 31) {#ファイル名が31byteを越えているか、
				&set_file_name
			} elsif (!$file_name) {#ファイル名そのものがない場合
				&set_file_name
			}#if
			if ($count) {
				$print_buf = '';#プリントバッファを初期化
			}
			$count++;#
			if ($del_f) {#デリミタ行を残すかどうか。$del_f==1== 削除する。$del_f==0==残す
				$_ = "";
			}
		} #if
		$print_buf .= $_;#プリントバッファに貯めます
	}#while
	close (INPUT);
	if ($count) {#最後のファイル
		&print_out;
	} else {#デリミタ行がなかった
&MacPerl'Answer(<<'mess');
指定されたデリミタがみつかりませんでした。
このファイルの分割はしません
mess
	}#if
}#foreach $ARGV

#●ファイル名再設定
sub set_file_name {
	exit unless $file_name = &MacPerl'Ask ("ファイル名が入力ファイル中にないか、ファイル名が不正です。", "${file_name}_$count");
}

#●出力部
sub print_out {
	$new_file = $ARGV;
	$new_file =~ s/(.+:).+/$1$file_name/;
	open(OUT, ">$new_file") || die "can't open $new_file\n";
	&MacPerl'SetFileInfo("YoED", "TEXT", "$new_file");
	print OUT $print_buf;# </BODY><HTML>
	close (OUT);
}