[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);
}