C语言 查询处理TAB字符



ASCII CharacterSet世界中,空格以下3个字符为一个数字。

Space(32) LineFeed(10) CarriageReturn(13) 
因此,使用一些编程语言(如C语言)以一种可移植的方式以标准方式编写程序来读取或写入这些空白字符是很容易的,通过使用以下符号,
LineFeed - 'n'
Carriage Return - 'r'
Space - ' '

我了解到TAB有时是4个或8个Space字符的集合。

我的问题:

我如何理解编程语言(如C)中't'字符的含义?在CharacterSet世界中TAB没有标准定义的情况下?

在ASCII中,水平制表符的代码为9。ASCII水平制表符是代码9,不管代码是用什么字符集写的。

在C语言中,'t'是源代码字符集中的水平制表符,与IO的字符集无关。't'的整数值可以为9,也可以不为9。

代码的字符集和IO(例如文件)的字符集通常是相同的。在2014年,通常有两个ASCII(至少对于ASCII码0 - 127)。

在C语言中,输出't'是比较精确的;

将活动位置移动到下一个水平制表位置在当前行上。如果活动位置在或超过最后定义的水平位置制表位置时,显示设备的行为未指定。§5.2.2 2

对于ASCII,水平制表符不是用来表示可打印的信息,而是用来控制设备。ASCII最初的定义导致了控制设备的精确动作的模糊性:移动到下一个制表停止。

考虑到这些相似但不同的意思,并承认其他语言有不同的意思,确切的意思高度依赖于情况。因此,为了保持可移植性,需要其他与情况相关的信息(例如制表位的定义或列表)来精确地生成和解释水平制表符。

推荐:
除非数据格式要求(CSV, makefile),否则不要生成制表符,而是生成空格。在读取't'时,将其解释为与1个或多个连续空格相同。

如何使用制表符取决于

  • 您正在处理哪种输入
  • 目标设备的性能

制表符是一个弹性分隔符,它告诉设备移动到下一个制表位。用N个空格替换制表符只是可怜人的处理方式。要正确呈现一个选项卡,你需要找出合适的选项卡停止符。

在文本终端上打印使用制表符作为字段分隔符的表格时,需要加载表格,计算每列中的字符数,并用空格填充每个字段,以便适合该列中最宽的字段。在这种情况下,制表符的长度由在下一列之前必须写入的字符数决定,而该字符数又随当前行的内容而变化。

制表符的一个实际例子:http://nickgravgaard.com/elastictabstops/

这只是对其他答案的补充。制表位通常设置在位置4*n8*n(这里我使用基于0的位置编号)。如果光标位于位置x,在输出制表符后,它跳到下一个制表位:

x = (x / 8 + 1) * 8;

或者如果制表符的间距为s(通常s为4或8,如上所述):

x = (x / s + 1) * s;

但是,如果制表符是完全灵活的(例如,用户可以在Microsoft Word中指定每个制表符),则不存在这样的公式。

最新更新