두 개의 명령 행 인수를받는이 Perl 스크립트를 작성했습니다 : 디렉토리와 연도. 이 디렉토리에는 텍스트 파일 또는 html 파일 톤이 있습니다 (연도에 따라 다름). 예를 들어,이 파일은 <number>rank.html
과 2001 년에서 2212 년 사이의 파일을 포함하고 있습니다. 각 파일을 개별적으로 열고 html 파일의 제목에 참여하여 텍스트로 인쇄하고 싶습니다. 파일. 그러나 코드를 실행하면 첫 번째 파일 제목이 텍스트 파일에 인쇄됩니다. 그것은 첫 번째 파일 2001rank.html 만 열어 본 것 같습니다. 아래 코드를 게시하고 도움을 준 사람에게 감사드립니다. 나는 HTML 파일이 다른 알면서도, 모든 루프 전달 같은 일을 동일하게 설정됩니다 $column_name
즉Perl 스크립트가 닫힌 후에도 같은 파일에서 계속 읽는 이유는 무엇입니까?
my $directory = shift or "Must supply directory\n";
my $year = shift or "Must supply year\n";
unless (-d $directory) {
die "Error: Directory must be a directory\n";
}
unless ($directory =~ m/\/$/) {
$directory = "$directory/";
}
open COLUMNS, "> columns$year.txt" or die "Can't open columns file";
my $column_name;
for (my $i = 2001; $i <= 2212; $i++) {
if ($year >= 2009) {
my $html_file = $directory.$i."rank.html";
open FILE, $html_file;
#check if opened correctly, if not, skip it
unless (defined fileno(FILE)) {
print "skipping $html_file\n";
next;
}
$/ = "\n";
my $line = <FILE>;
if (defined $line) {
$column_name = "";
$_ = <FILE> until m{</title>};
$_ =~ m{<title>CIA - The World Factbook -- Country Comparison :: (.+)</title>}i;
$column_name = $1;
}
else {
close FILE;
next;
}
close FILE;
}
else {
my $text_file = $directory.$i."rank.txt";
open FILE, $text_file;
unless (defined fileno(FILE)) {
print "skipping $text_file\n";
next;
}
$/ = "\r";
my $line = <FILE>;
if (defined $line) {
$column_name = "";
$_ = <FILE> until /Rank/i;
$_ =~ /Rank(\s+)Country(\s+)(.+)(\s+)Date/i;
$column_name = $3;
}
else {
close FILE;
next;
}
close FILE;
}
print "Adding $column_name to text file\n";
print COLUMNS "$column_name\n";
}
close COLUMNS;
.
어휘 파일 핸들을 사용하십시오. 왜'fileno'를 사용하여'open'의 성공을 확인하고 있습니까? –
어떻게 성공을 확인해야합니까? – adhanlon
오픈 콜 결과로 성공을 확인하십시오. 그러나 먼저 doc을 읽어야합니다. http://perldoc.perl.org/functions/open.html 항상! :) – sebthebert