Perlの一致パターン

Perlの一致パターン

以下を含む入力ファイルがあります。

000ABCDEFGHIJKLMN2018022623595900021
CGT11~|~|110~|~|221~|~|H0331~|~|~|~|
CGT11~|~|110~|~|222~|~|H0332~|~|~|~|
CGT11~|~|110~|~|223~|~|H0335~|~|~|~|
CGT11~|~|110~|~|224~|~|H0333~|~|~|~|
99800000000000000011~|~|~|~|~|~|~|~|

行数を数えてファイルの最後の行に行き、「999」を確認したいと思います。一致する場合は次の手順に進み、一致しない場合はエラーメッセージが表示されます。現在、私の入力ファイルの最後の行に「998」があるため、エラーメッセージが表示されます。 Perlでこれをどのように実行できますか?誰でもこの問題を解決するのに役立ちますか?

私の現在のコードは次のとおりです。

#!/usr/bin/perl
open(FILE, "<deep.txt") or die "Could not open file: $!";

my $lines = 0;

while (<FILE>) {
    $lines++;
if($Number =~ m/\d{1,3}/){

     $N = $Number;
print "$N";
 }
}

print "The no of lines present is $lines \n";

ベストアンサー1

完全にはわかりませんが、役に立ちます。

#!/usr/bin/perl
use strict;
use warnings;

my $fname = "deep.txt";
open(my $fh, "<:encoding(ASCII)", $fname) || die "cannot open $fname for reading";

my $num = 0;

while(<$fh>)
{
    $num = substr $_, 0, 3 if eof;
}
close($fh) || warn "cannot close $fname";

print "Oops, last line doesn't start with 999!\n" if $num != 999;

このeofチェックは、読んでいるファイルの最後の行であることを確認するのに役立ちます。


whileループを1行に減らすこともできます。

eof and $num = substr $_, 0, 3 while(<$fh>);


追加資料:

おすすめ記事