Откройте файл в двоичном режиме и убедитесь, что файл заканчивается указанной строкой - PullRequest
0 голосов
/ 19 марта 2012

Я должен написать скрипт со следующими характеристиками:

  1. Открыть файл в двоичном режиме.
  2. Убедитесь, что 000001 , 000002 - 0000031 идет в том же порядке в файл. Между любыми двумя 000001 000002 может быть еще несколько строк (которые должны быть проверены)
  3. Конец файла с 000000

Я пробовал это, но это не кажется правильным.

#!/usr/bin/perl
$SctFile = $ARGV[0] ;
$SccFile = $ARGV[1];
open FILE, $SctFile or die $!;
binmode FILE;
$sctfile =~ m/000001.*000002.*000000$/

1 Ответ

3 голосов
/ 19 марта 2012

Я думаю, вам просто не хватает той части, где вы получаете данные файла. Есть много способов сделать это. Вы можете украсть файл, что является самым простым (но не самым мудрым) делом. Затем вы сравниваете данные, которые вы читаете из файла, а не имя файла. В Perl, когда вы открываете файловый дескриптор, у вас есть его для получения данных из файла, и вам все равно нужно получать данные самостоятельно:

 #!/usr/bin/perl
 $SctFile = $ARGV[0] ;                               # get filename
 open FILE, $SctFile or die $!;                      # open file for reading
 binmode FILE;                                       # bin mode it for binary reading
 my $data = do { local $/; <FILE> };                 # slurp all the data

 if( $data =~ m/000001.*000002.*000000$/ ) { ... }   # match against the data

Вы также можете отобразить в памяти файл , если вы не собираетесь его менять. На самом деле вы никогда не читаете его в ОЗУ, поэтому файл может быть настолько большим, насколько вам нравится, без особого беспокойства:

 #!/usr/bin/perl

 use File::Map qw(map_file);

 $SctFile = $ARGV[0] ;

 map_file( my $map, $SctFile );

 if( $map =~ m/000001.*000002.*000000$/ ) { ... };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...