查询处理TAB字符?

时间:2014-06-24 12:58:22

标签: c language-agnostic

ASCII CharacterSet世界中,3个以外的空白字符都有一个数字。

Space(32) LineFeed(10) CarriageReturn(13) 

因此,使用一些编程语言(如C)以便携方式编写程序以标准方式读取或写入此类空白字符,使用以下符号很容易,

LineFeed - '\n'
Carriage Return - '\r'
Space - ' '

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

我的问题:

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

3 个答案:

答案 0 :(得分:2)

在ASCII中,水平制表符是代码9.无论编写代码的字符集是什么,ASCII水平制表符都是代码9。

在C中,'\t'是源代码字符集中的水平制表符,与IO的字符集无关。 '\t'的整数值可能是/可能不是9.

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

在C中,打印'\t'有点精确;

  

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

使用ASCII,Horizontal Tab不是为了表示可打印信息,而是为了控制设备。 ASCII原始定义导致控制设备的精确操作模糊不清:移动到下一个制表停止。

鉴于这些相似但不同的含义,并承认其他语言具有不同的含义,其确切含义在很大程度上取决于具体情况。因此,为了保持可移植性,需要其他依赖于情况的信息(例如,制表位的定义或列表)以精确地生成和解释水平制表符。

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

答案 1 :(得分:0)

如何处理标签取决于

  • 您正在处理哪种输入
  • 您要定位的设备的功能

选项卡是指弹性分隔符,用于指示设备移动到下一个制表位。用N个空格替换标签只是穷人的处理。要正确呈现选项卡,您需要以某种方式找出适当的制表位。

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

制表位的实际示例:http://nickgravgaard.com/elastictabstops/

答案 2 :(得分:0)

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

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

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

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

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