2012-03-19 3 views
-5

で終わることを確認します。オープンバイナリモードでファイルとファイルは、私は次の仕様のスクリプトを記述する必要があり、指定された文字列

  1. オープンバイナリモードでファイル。
  2. ファイルで000001 , 000002 - 0000031の順序が同じであることを確認してください。 000000

といくつかのより多くの(検証する必要がある)任意の2 000001 000002 間で文字列

  • ファイルの終わりがあるかもしれません私はこの1つを試してみましたが、それは正しいようではありません。

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

    さまざまなバイト(たとえば、000001は3バイト、バイト1は0、バイト2は0、バイト3は1)。 – Glenn

    +0

    000001文字列を検索する必要があります。同じもののための正規表現を書くのを助けてください。 – user381862

    +0

    #!/ usr/bin/perl $ SctFile = $ ARGV [0]; $ SccFile = $ ARGV [1]; オープンFILE、$ SctFileまたはdie $ !; binmode FILE; $ sctfile =〜m/000001. * 000002. * 000000 $/ 私はこれを試しましたが、正しいとは思われません。 – user381862

    答えて

    3

    私はあなたがファイルデータを取得する部分を見逃していると思います。これを行うには多くの方法があります。あなたは、最も簡単な(しかし最も賢明ではない)ことである、ファイルをスラップすることができます。ファイル名ではなく、ファイルから読み取ったデータと照合します。あなたはファイルハンドルを開いたら、Perlでは、あなたはファイルからデータを取得することが可能な持っているとあなたはまだ自分でデータを取得する必要があります。またmemory map the fileあなたは変更するつもりはないことができるかどう

    #!/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 
    

    それ。あなたが実際にRAMにそれを読んだことがないので、ファイルは、あまり心配することなく、あなたが好きなように大きくすることができます:あなたはASCII文字列を示す(文字のように発生する必要があります)またはバイナリ値であり、値について

    #!/usr/bin/perl 
    
    use File::Map qw(map_file); 
    
    $SctFile = $ARGV[0] ; 
    
    map_file(my $map, $SctFile); 
    
    if($map =~ m/000001.*000002.*000000$/) { ... }; 
    
    関連する問題