1

ファイルを読んでいて、Unicode NULL、 U+0000を持つ行をスキップする方法を知りたいですか? 以下のすべてを試しましたが、どれも機能しません。

  • if($line)
  • chomp($line)
  • $line =~ s/\s*$//g;
4

3 に答える 3

6

「すべて」のリストには、明らかな$line =~ m/\000/.

于 2013-03-04T21:33:19.480 に答える
2

Unicode NULL( UTF-8でエンコードされた場合はASCII NULと同じ)について質問したので、 perlunicodeのドキュメント\N{U+...}で説明されている形式を使用してみましょう。

\N{U+...}表記を使用して、Unicode文字を文字列に追加することもできます。目的の文字のUnicodeコード(16進数)は、中括弧内の。の後に配置する必要がありますU。たとえば、スマイリーフェイスは\N{U+263A}です。

正規表現で対戦することもできます\N{U+...}。下記参照。

#! /usr/bin/env perl

use strict;
use warnings;

my $contents =
  "line 1\n" .
  "\N{U+0000}\n" .
  "foo\N{U+0000}bar\n" .
  "baz\N{U+0000}\n" .
  "\N{U+0000}quux\n" .
  "last\n";

open my $fh, "<", \$contents or die "$0: open: $!";

while (defined(my $line = <$fh>)) {
  next if $line =~ /\N{U+0000}/;
  print $line;
}

出力:

$ ./filter-nulls
ライン1
過去
于 2013-03-04T22:29:54.797 に答える
2

Perl 文字列には、NUL 文字を含む任意のデータを含めることができます。true またはfalseifのみをチェックします (ここで""、 と"0"は 2 つの false 文字列で、単一の NUL "\x00" を含む文字列を含む他のすべては true です)。NULchompではなく、行区切りのみを削除します。NUL 文字は空白ではないため、一致しません\s

8 進表記または 16 進表記 (それぞれ"\000"または"\x00") を使用して正規表現で指定することにより、NUL 文字を明示的に一致させることができます。

于 2013-03-04T22:04:41.513 に答える