【问题标题】:Tab space inconsistency in a txt file using PHP使用PHP的txt文件中的制表符空间不一致
【发布时间】:2017-09-01 10:21:26
【问题描述】:

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

所以问题是,当 \t 用于在字符之间提供制表符空间时,为什么在不同的地方会有不同的间距。

下图是用 sublime text 拍摄的,它显示了上面提到的不同制表符空间。

【问题讨论】:

    标签: php text-files indentation spaces


    【解决方案1】:

    您的编辑器已配置为将光标前进到下一个制表位。将制表符宽度配置为 4 个字符,制表位位于行偏移量 0、4、8、a.s.o。应该可以理解,偏移 11 上的水平制表符将前进到偏移 12,而不是 15 (11 + 4)。它只是不是固定宽度,但必须与固定停靠点相关。

    【讨论】:

      【解决方案2】:

      如果您在代码中给出了正确的 \t,则 Tabs Spaces 与它无关,它已正确生成。行为选项卡因编辑器类型而异。

      例如,如果您使用以下代码进行生成

       $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++ 中不会出现这种不一致。

      【讨论】:

      • 没有不一致。记事本在每个8 列上放置制表符(tab 字符的“大小”在记事本中为8),Notepad++ 使用4,就像现在大多数其他编辑器一样。
      【解决方案3】:

      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。下一个使光标跳转到不显示任何内容的29 列(3 列)。然后还有另一个tab,它跨越4 个字符,直到下一个制表符(在33 列中)2.0SEp Salary 值开始。

      列、制表符 anb 和您的数据如下所示:

      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 字符,光标如何跳过多列,以到达下一个制表符。

      【讨论】:

      • 当我在 sublime text 或 textmate 或记事本中打开它时,它会显示相同的格式,所以我认为它与编辑器无关。我们不能告诉 PHP 做一个一致的 4 个空格的表格空格缩进吗?
      • 你看过我的回答了吗?再读一遍。然后仔细查看您发布的图像。 D 之后只有 3 个空列(对于第一个选项卡,然后是第二个选项卡的另外 4 个列。并且 PHP 不参与编辑器显示制表符字符的方式。如果您希望列之间始终有 4 个空格然后使用 4 个空格而不是制表符。
      猜你喜欢
      • 2012-10-10
      • 2011-08-06
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2020-01-23
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多