解析文件时如何确定制表符是什么



我正在打开一个文件(在perl中),我想知道如何确定制表符的样子。

我知道它们在我的档案中,但我想知道我怎么知道它是什么。我知道对于输出到文件,您会使用 \t,但读取文件时不一样。

我也知道它将其读取为某种 TAB 字符,因为我在每一行上打印了一个逐行字符,并且可以轻松看到 TAB 行。

制表符总是t,没有什么可说的了。

但是,某些编辑器使用有关单个制表符应表示多少空格的约定。常识说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];
}

某些 IDE 和编辑器通常会在按 Tab 键时插入四个空格而不是制表符。实际的制表符在perl中是\t(内容取决于平台,但\t应始终表示平台的制表符)

为了确保您同时捕获制表符和任何 4 个空格的组,您可以正则表达式/t| {4}/

相关内容

  • 没有找到相关文章

最新更新