0

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

我知道它们在我的文件中,但我想知道如何分辨它是什么。我知道要输出到文件,你会使用 \t,但它对于读取文件并不相同。

我也知道它会将其读取为某种 TAB 字符,因为我在每一行上逐个字符地打印出一行,并且可以很容易地看到 TABed 行。

4

2 回答 2

2

制表符始终\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];
}
于 2013-01-29T04:39:13.473 回答
0

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

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

于 2013-01-29T04:57:08.833 回答