使用PHP在txt文件中标签空间不一致

时间:2017-09-01 10:21:27

标签: php text-files indentation spaces

我已在此处上传了此附件:https://files.fm/u/uqm4marg 该文件是使用PHP生成的。 \ t用于插入制表符空间。它可以查找整个文件,但是INR0564 D和INR0564 C之间的选项卡空间。此选项卡空间只有一个空格,而其他选项卡空间有4个,如667722553331和INR0564之间。

所以问题是当\ t用于在字符之间给出一个标签空间时,为什么在不同的地方有不同的间距。

下面的图片是在sublime文本上拍摄的,显示了上面提到的不同标签空间。

3 个答案:

答案 0 :(得分:1)

您的编辑器配置为将光标前进到下一个制表位。如果制表符宽度配置为4个字符,则制表位在线偏移0,4,8,a.s.o处。应该可以理解的是,偏移11上的水平标签将前进到偏移12,而不是15(11 + 4)。它不是一个固定的宽度,但必须与固定挡块有关。

答案 1 :(得分:1)

如果您在代码中给出了正确的\ t,那么Tabs Spaces与之无关。它已正确生成。 “行为”选项卡与编辑器类型不同。

对于Instance,如果使用以下代码进行生成

 $myfile = fopen(getcwd()."/newfile.txt", "w") or die("Unable to open 
                  file!");
            $txt = "BATBALL88026613\n
                    667722553331\tINR0564D\tSeptember\t2.00Salary\n
                    051122334432\tINR0564C\tSeptember\t1.00Salary\n
                    056401112233\tINR0564C\tSeptember\t1.00Salary";
            fwrite($myfile, $txt);
            fclose($myfile);

你尝试在NOTEPAD和NOTEPAD ++中打开它会有所不同。 NOTEPAD ++中不存在这种不一致。

答案 2 :(得分:0)

tab character不插入空格。它是由编辑器解释的单个字符。

purpose of the tab character用于帮助以表格格式(即表格格式)写入数据。由于行已由文本行提供,因此tab字符有助于创建列。

编辑器将tab字符解释为将光标向右移动而不是一个位置(与space字符一样),但直到它到达下一个制表符停止。

在计算机软件中,制表器停止通常设置在每个8或4列。这意味着列1917 a.s.o.或者15913等。在您的图片中(以及您问题中的说明),似乎"尺寸"你正在使用的标签是4列(这是现在最常用的值)。

因为tab字符将光标发送到固定位置,所以它的感知大小"大小"不固定,它取决于tab字符之前的光标列。

在您的图片中,第一列数据有12个字符(它显示在编辑器中的列1-12上)。然后,tab字符将光标发送到列17上的下一个制表工具。下一个值(INR05647字符)显示在17-23列中。下一个tab字符为"较短",它仅涵盖1列;它将光标发送到显示25的列D。下一个使光标跳转到列293列),其中不显示任何内容。然后还有另一个tab跨越4个字符,直到33值开始的下一个制表符(在2.0SEp Salary列中)。

列,制表符和数据如下所示:

1   5   9   13  17  21  21  25  29  33 ...
v   v   v   v   v   v   v   v   v   v  ...
056665554531    INR0564 D       2.0Sep Salary
            .   |      .|.  |   |
            +-->|      >|+->+-->|

在上图中,点(.)标记每列数据后光标的位置,管道(|)标记tab字符后的位置显示。 "箭头"在最后一行描述了由于tab个字符而光标跳过多个列的方式,以便到达下一个制表符。