Jeffrey Friedlの優れたMastering Regular Expressionsを読んでPerlとRegexを教えています。テキストファイルの内容をPerlのオフセットから末尾まで読む
53ページから始まる「小さなメールユーティリティ」の練習問題を解決しようとしたが、ファイルの内容をオフセットから始まる変数に保存する方法がわからないという問題に直面した。
私の(短縮版)スクリプトです。
my ($body, $line, $subject);
$body = $line = $subject = "";
open(MYFILE, "king.in") || die("Could not open file!");
# Read the file's content line by line
while ($line = <MYFILE>)
{
# An empty line marks the beginning of the body
if ($line =~ m/^\s+$/) {
# HERE IS THE ISSUE
# Save the file content starting from the current line
# to the end of the file into $body
last;
}
if ($line =~ m/^subject: (.*)/i) {
$subject = $1;
}
# Parse additional data from the mail header
}
close(MYFILE);
print "Subject: Re: $subject\n";
print "\n" ;
print $body;
私はいくつかのオンライン調査をしましたが、変数$本体にファイル(つまり、電子メールの本文)の残りの部分を配置する方法を見つけ出すことができませんでした。
私は最終的に、私は配列に最初のファイルの行を入れての作業が、不十分なsolutionになってしまった私は$pos = tell(MYFILE);
を使用して、バイト単位でファイル内の現在位置を取得することができることを考え出しました。
$ bodyにオフセット(行番号またはバイトのいずれか)からファイル内容を保存するにはどうすればよいですか?
編集: 私のソリューションの-as vstm-によって提供さは、本体の始まりを示す空行に遭遇したとき、ファイルの残りの部分を読み込むこと$body = join("", <MYFILE>)
を使用することです。 私が書いたスクリプト全体はhereです。
これは私にはうってつけですが、Perlで "このファイルのx〜z行を教えてください"という言い方をしたいと思います。
皆様のご助言ありがとうございます。
'$ body = join(" "、);'トリックを完璧にやってくれました。好奇心から:どのように私は "このファイルのxからzまでの行をPerlで教えてください"と言いますか?最初にすべての行を配列に入れる必要がありますか? –