2012-02-02 249 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終止。