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

时间:2013-01-29 04:07:13

标签: perl file parsing

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

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

我也知道它将它读作某种TAB字符,因为我在每行打印出一行字符char,可以很容易地看到TABed行。

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:0)

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

要确保同时捕获制表符和4个空格的任意组,您可以使用/\t| {4}/

的正则表达式