2012-02-02 542 views
16

“定界符”,“终止符”和“分隔符”的用法背后有什么语义?例如,我相信终结者会在每个令牌和每个令牌之间的分隔符之后发生。分隔符是否与这两者中的任何一个相同,还是它们只是分隔符的形式?何时使用术语“定界符”,“终止符”和“分隔符”

SO有三个标签,但它们不是彼此的同义词。这是因为他们真的不同吗?

回答

11

从技术上讲,事物之间有一个分隔符,可能是为了告诉你一个字段在哪里结束,另一个字段在哪里开始,比如在逗号分隔值(CSV)文件中。

终止符在某些事物的末尾,终止行/输入/任何。

分隔符可以是分隔符或其他任何分隔事物的分隔符。例如,考虑英语单词之间的空格。

你可能会认为换行符是行终止符,行的分隔符或分隔两行的东西。由于这个原因,在Unicode规范中有几个不同的换行符。

+0

那么,分隔符和分隔符有什么区别?你的解释似乎暗示CSV和英文空格中的逗号都是分隔符和分隔符;它是否正确? – musiphil 2012-09-03 21:03:45

+0

是的,他们的意思几乎相同。分隔CSV文件中的字符串可以告诉您数据限制的位置。这些术语大致相同,尽管具有不同的含义。伊恩狄金森的回答提供了一个更完整的解释。 – IanGilham 2012-09-05 10:26:12

18

分隔符表示某些事物的限制,它从哪里开始以及在哪里结束。例如:

"this is a string" 

有两个分隔符,这两个分隔符恰好是双引号字符。分隔符指示了什么是事物的一部分,什么不是。

隔板区分序列中的两件事情:

one, two 
1\t2 
code(); // comment 

一个分离器的作用是划定两个不同的实体,从而使它们可以被区分。 (请注意,我说“两个”是因为在计算机科学中我们通常会谈论处理线性字符序列)。

终止符指示序列的结束。在CSV中,您可以将换行符视为终止一条记录,或将一条记录与下一条记录分开。

令牌边界通常由改变语法类表示:

foo() 
作为 word(foo)lparenrparen

可能会被标记化 - 有没有代币之间的任何明确的分隔符,但一个标记将承认字母和标点符号之间的语法类的变化。

这些类别并不完全不同。例如:

[red, green, blue] 

可能(取决于您的语法)是三个项目的列表;括号将分隔列表,右括号终止列表并标记blue标记的结尾。

至于SO使用这些术语作为标签,他们就是这样:标签来表明问题的主题。标签没有统一的受控词汇表;任何有足够业力的人都可以添加新的标签。在术语上存在足够的差异,因此在所涵盖的所有主题中,您永远不可能拥有单个受控标签词汇表。

+0

“定界符”的定义与[Wikipedia's](https://en.wikipedia.org/wiki/Delimiter)不一致。在那里,“分隔符”几乎涵盖了你所说的“分隔符”。 – 2017-02-02 12:57:41

0

有趣的问题和答案。总而言之,1)分隔符标记某些事物的“限制”,即开始和/或结束; 2)终止符只是“结束分隔符”的特殊术语; 3)分隔符需要在其两侧有项目(不像分隔符)。

我能想到的一个开始分隔符的最佳示例是编程语言(“#”,“//”等)中的开始注释标记。

我能想到的终结者(end delimiter)的最佳例子是Unix中的换行符。这是一个用词不当 - 它总是终止一个(可能是空的)行,但并不总是开始一个新行,即当它是文件中的最后一个字符时。也许一个更好的常见例子是句子的简单时期。

我能想到的分隔符最好的例子就是简单的逗号。请注意,逗号在英文之前和之后都不会以英文显示。

有趣的是,这些都不一定限于单字符。事实上awk(或者只是gawk?)在Unix中允许FS(字段分隔符)是任何正则表达式。另外,虽然“任何非零量的空白”被认为是例如在文本中的“单词定界符”,但是, wc命令中,在正则表达式中也有零宽度的“字边界”说明符(例如\ b)。有趣的是,思考这种零宽度的项目/边界是否也可以被视为“分隔符”。我倾向于认为没有太多的延伸。

0

终止符在空开始时是分隔符。 A; B; C;实际上是A; B; C;空。

0

这个回答是在CSV的背景下,因为所有提供的答案都专注于英语。

是描述的东西边界,分离是现场分隔符,终止是记录分隔一个共同的名字一个共同的名字在给定的CSV说明书中提到的所有元素。


分隔符是CSV格式规范的一部分,它定义了边界并且不一定是可打印的字符。

终止符,分隔符和字段限定符是分隔符,但不需要指定CSV格式,例如, 50列分隔符表示每个50列是一个值 - 每行中0到49之间的字符(通常用空格填充)是field0的值,而来自50-99的字符是field1的值等。

Terminator是通常由换行符(LF),回车符(CR)或组合(例如CRLF)代表的分隔符,并标记单个CSV记录的结尾。

分隔符是一个用印刷字符(例如分号)表示的分隔符,并标记了CSV字段之间的区分,它已被引入以存储动态长度值。没有分隔符的CSV格式规范通常具有恒定的字段长度。

字段限定符通常是成对使用的分隔符而不是转义序列,它是字段值中不允许的可打印字符(除非给定的CSV格式规范提供转义序列)并标记开始和结束引入它来存储包含分隔符的值。

转义序列是一个字符(或一组字符),它将转义序列后面的任何内容标记为非重要的,并将其作为字段值的一部分(例如反斜线可能会指定紧跟在后面的分隔符作为价值)。该序列可以转义一个或多个字符。

1

A 定界符是一个或两个标记,显示某物的开始和结束。他们是需要的,因为我们不知道这个'东西'会有多久。我们可以有:1.一个单个定界符,或2.对成对定界符

  • [a, b, c, d, e]每个逗号(,)是单个定界符。左右括号([])是对分隔符
  • "hello",在两个引号符号(")是成对分隔符

一个分隔符是一个“分隔符”的代名词,但是从我的经验,通常是指场分隔符。字段分隔符充当一个字段和后一个字段之间的分隔符,这就是为什么可以通过“分隔”它们。

  • <file1>␜<file2>␜<file3>,文件分隔符(),尽管明确地具有 “分隔符” 中,名既是定界符隔板

终止马克一组事物的结束,再次需要,因为我们不知道它有多长。

  • abdefa\0,这里的空字符\0终止告诉我们字符串已经结束。
  • foo\n,这里的换行符\n是一个终止符告诉我们该行已经结束。

条款,分隔符,分隔符从存储的古典思想起源,概念,正由文件,记录和字段的,(一个文件有很多的记录,记录有许多字段) 。在这种情况下,单个分隔符和成对分隔符可能被称为记录分隔符字段分隔符。由于文件记录 - 字段分类法的历史意义,这个术语具有更广泛的用途(请参阅Wikipedia页面Delimiter)。

  • 下面是两个文件,每个文件有三个记录具有四个字段每个记录:

    martin,rodgers,33,28000\n 
    timothy,byrd,22,25000\n 
    marion,summers,35,37000\n 
    === 
    lucille,rowe,28,33000\n 
    whitney,turner,24,19000\n 
    fernando,simpson,35,40900\n 
    

    这里,,\n,因为我们知道有一个分隔符,但也可能被称为记录分隔符字段分隔符


对于复杂的嵌套结构,终止子也可以是分隔符/分离器(它们不是相互排斥的定义)。从前面的示例中,文件内部的===标记可被视为终结符(它是文件末尾)。但是当我们查看很多文件时,===就像分隔符/分隔符。

  • 考虑在UNIX文件系

    This is line 1\n 
    This is line 2\n 
    This is line 3\n 
    

    换行符都终止(他们告诉我们的字符串结尾),并分隔符(他们告诉我们每一行开始,结束)。从Wikipedia

    查看换行符的两种方法都是自洽的,即换行符不是单独的行就是换行符。

真的,你只需要说出“终结者”当你在一个单独的项目说话,(只是一个字符串1234\0,只有一行abcd\n等) - 它会不清楚在这方面的终结者是否也可能是一个更复杂的父母结构的分隔符。

0

“单词1”, “单词2” \ NULL

  1. 的字由引号分隔,
  2. 由逗号分隔,
  3. 和整个事情是由\ NULL终止。