0

(perl で) ファイルを開いていますが、タブ文字がどのように見えるかをどのように判断するのか疑問に思っていました。

それらが私のファイルにあることは知っていますが、それが何であるかをどうやって見分けることができるのか疑問に思っていました. ファイルへの出力には\tを使用することは知っていますが、ファイルの読み取りには同じではありません。

また、すべての行で char ごとに行 char を出力し、TAB 行を簡単に見ることができたので、ある種の TAB 文字として読み取られることも知っています。

4

2 に答える 2

2

タブ文字は常に\tです。これ以上言うことはありません。

ただし、一部のエディターでは、1 つのタブ文字が表すスペースの数について規則を使用しています。常識では 8 と言いますが、多くの人は 4 を意味します。私はそれが 3 や 2 つのスペースを意味することさえ見てきました。

一部のエディター (Komodo や Komodo Edit など) は賢くしようとします: ソース ファイルを読み取り、先頭のスペースとタブの典型的な分布を数えます。たとえば、先頭のスペースが 4、8、12、... しかない場合、タブ文字が 4 つのスペースを意味するはずであると暗黙的に想定する可能性があります。または、先頭に 2、4、6、... のスペースがある場合は、タブごとに 2 つのスペースを使用できます。

私があなたを正しく理解していれば、先頭のスペースに対して同様の動作が必要です

この場合、次のコードを使用して、最も可能性の高いタブとスペースの値を判断できます。このコードは最適ではないことに注意してください。実際のタブを含む行は無視され、タブのインデントを取得するために最初のインデント レベルのみが考慮されます。これは、適切な実装を行うための出発点としてのみ考慮してください。

my %dist;
while (my $line = <>) {
    my ($spaces) = ($line =~ /(^ *)/);
    my $len = length($spaces);
    $dist{$len}++;
}
my @sp = sort {$a <=> $b} keys %dist;
print "Leading space distribution in file: "
    . join(",", @sp) . "\n";
if (scalar @sp >= 2) {
    print "Most likely tab setting is: ", $sp[1] - $sp[0];
}
于 2013-01-29T04:39:13.473 に答える
0

一部の IDE やエディターでは、タブ キーを押したときにタブ文字の代わりに 4 つのスペースを挿入するのが一般的です。実際のタブ文字は perl では \t です (内容はプラットフォームによって異なりますが、\t は常にプラットフォームのタブ文字を表す必要があります)。

タブ文字と 4 つのスペースのグループの両方を確実にキャッチするには、次の正規表現を使用できます。/\t| {4}/

于 2013-01-29T04:57:08.833 に答える