「区切り文字」、「ターミネーター」、「セパレーター」という単語の使用の背後にあるセマンティクスは何ですか?たとえば、ターミネータは各トークンの後に発生し、セパレータは各トークンの間に発生すると思います。区切り文字はこれらのいずれかと同じですか、それとも単に区切り文字の形式ですか?
SOには3つすべてのタグがありますが、それらは互いに同義ではありません。これは、すべてが本当に異なるためですか?
技術的には、区切り文字は、コンマ区切り値(CSV)ファイルなど、あるフィールドの終わりと別のフィールドの始まりを示すために、物事の間を行き来します。
ターミネータは何かの終わりに行き、行/入力/何でも終了します。
区切り文字は、区切り文字または物事を区切るその他のものにすることができます。たとえば、英語の単語間のスペースについて考えてみます。
改行文字は、行末記号、行の区切り文字、または2行を区切るものであると主張できます。このため、Unicode仕様にはいくつかの異なる改行タイプの文字があります。
区切り文字は、何かの限界、開始位置と終了位置を示します。例えば:
_"this is a string"
_
には2つの区切り文字があり、どちらも二重引用符で囲まれています。区切り文字は、物事の一部であるものとそうでないものを示します。
セパレータは、シーケンス内の2つのものを区別します。
_one, two
1\t2
code(); // comment
_
セパレーターの役割は、2つの異なるエンティティーを区別できるように区別することです。 (コンピュータサイエンスでは一般に文字の線形シーケンスの処理について話しているので、「2」と言うことに注意してください)。
ターミネータはシーケンスの終わりを示します。 CSVでは、改行は1行でレコードを終了する、または1つのレコードを次のレコードから分離するものと考えることができます。
トークンの境界は、多くの場合、構文クラスの変更によって示されます。
_foo()
_
Word(foo)
、lparen
、rparen
としてトークン化される可能性があります-トークン間に明示的な区切り文字はありませんが、トークナイザーはアルファ間の文法クラスの変更を認識しますおよび句読文字。
カテゴリは完全に区別されていません。例えば:
_[red, green, blue]
_
(構文によっては)3つの項目のリストになる可能性があります。角かっこはリストを区切り、右角かっこはリストを終了し、blue
トークンの終わりを示します。
SOがこれらの用語をタグとして使用しているのは、質問のトピックを示すタグです。タグ用の統一された統制語彙は1つではありません。十分なカルマを持っている人は誰でも新しいタグを追加できます。 SOがカバーするすべてのトピックにわたって、単一の制御されたタグ語彙を持つことは決してできないという用語の十分な違いが存在します。
A delimiter is one or two markers that show the start and end of something. They're needed because we don't know how long that 'something' will be. We can have either: 1. a single delimiter, or 2. a pair of pair-delimiters
[a, b, c, d, e]
各カンマ(,
)は単一の区切り文字です。左角かっこと右角かっこ([
、]
)はペア区切り文字です。"hello"
、2つの引用記号("
)はペア区切り文字seperatorは「区切り文字」の同義語ですが、私の経験から、通常はフィールド区切り文字を指します。 )。フィールド区切り文字は、1つのフィールドとそれに続くフィールドの間の仕切りとして機能します。そのため、フィールドを「分離」していると見なすことができます。
<file1>␜<file2>␜<file3>
、ファイル区切り文字(␜
)明示的に「区切り文字」を持つ名前にもかかわらず、区切り文字と区切り文字の両方ですterminatorは、物事のグループの終わりを示します。これも、長さがわからないために必要です。
abdefa\0
、ここではヌル文字\0
は、文字列が終了したことを示すターミネータです。foo\n
、ここでは改行文字\n
は、行が終了したことを示すターミネータです。区切り文字、区切り文字という用語は、概念的には、ファイル、レコード、およびフィールドで構成される、ストレージの古典的な考え方に由来します(ファイルには多くのレコードがあります、レコードには多くのフィールドがあります)。このコンテキストでは、単一の区切り文字とペアの区切り文字は、レコード区切り文字およびフィールド区切り文字。 files-records-field分類法の歴史的な重要性のため、この用語はより広く使用されています( 区切り文字 についてはWikipediaのページを参照してください)。
以下は2つのファイルで、それぞれに3つのレコードがあり、各レコードには4つのフィールドがあります。
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
改行はターミネータ(文字列の終わりを教えてくれます)と区切り文字(各行の始まりと終了)。から ウィキペディア :
改行を表示する2つの方法は、どちらも一貫性があり、改行が行を分離するか、行を終了することです。
実際には、1つの個別の項目で話しているときに「ターミネーター」と言うだけで済みます(1つの文字列1234\0
、たった1行abcd\n
など)-そして、このコンテキストのターミネータが、より複雑な親構造の区切り文字にもなり得るかどうかは不明です。
提供された回答はすべて英語に焦点を当てているため、この応答はCSVのコンテキストにあります。
Delimitersは、指定されたCSV仕様で言及されている、ものの境界を説明するすべての要素です。separatorsは、フィールド区切り文字の一般名です。terminatorsは、レコード区切り文字の一般名。
区切り文字はCSV形式仕様の一部であり、境界を定義し、印刷可能な文字である必要はありません。
ターミネータ、セパレータ、フィールド修飾子は区切り文字ですが、CSV形式を指定する必要はありません。 50列の区切り文字は、各50列が1つの値であることを意味します。各行の0〜49の文字(通常は空白で埋められます)はfield0の値であり、50〜99の文字はfield1の値です。
ターミネータは、通常、改行(LF
)、キャリッジリターン(CR
)、または組み合わせ(CRLF
など)のいずれかで表される区切り文字であり、単一のCSVレコードの終わりを示します。 。
区切り文字は、印刷された文字(セミコロンなど)で表され、CSVフィールド間の分割を示す区切り文字であり、動的な長さの値を格納するために導入されました。区切り文字のないCSV形式の仕様では、通常、フィールド長は一定です。
フィールド修飾子は、通常、エスケープシーケンスの代わりにペアで使用される区切り文字であり、フィールド値で許可されない印刷可能な文字であり(CSV形式の指定でエスケープシーケンスが提供されている場合を除く)、フィールドの開始と終了をマークします。区切り文字を含む値を格納するために導入されました。
エスケープシーケンスは、エスケープシーケンスに続くものを重要ではないものとしてマークし、そのためフィールド値の一部としてマークする文字(または文字のセット)です(たとえば、円記号は、値の一部として直後の区切り文字を指定する場合があります)。このシーケンスは、1つまたは複数の文字をエスケープできます。
「ワード1」、「ワード2」\ NULL
空から始める場合、ターミネータはセパレータです。 A; B; C;実際にはA; B; C;空です。
delimiter
にはいくつかの意味があります。
文中で使われる空間として(フロンティア)。
区切り文字はフロンティアのようなもので、 国の間に存在します 。
その意味で、フロンティアを持つにはtwo国が必要です。
通常、単語の間にスペースがありますが、最後にはありません。スペースは単語を区切りますが、terminate
文(単語のコレクション)は区切りません。文:
これは短い文です。
4つのスペースがあり、Wordの区切り文字として機能します。エンディングスペースはありません。
実際、通常は名前が付けられていない2つの追加の区切り文字があります。文の開始と終了です。以下のような ^
および$
テキストの文字列の開始と終了をマークするために正規表現で使用されます。
そして、人間の言語では、(スペースに加えて)単語の区切り文字としても機能する句読点(ドット、コンマ、セミコロン、コロンなど)があります。
引用符(境界)で使用されます。
次のような文:
「これは短い文章です。」
delimited
(開始と終了)は二重引用符(“”
)。この意味で、それは「バランスのとれた区切り文字」のようなものです( ウィキペディアのバランスのとれたブラケット )。
frontier
と境界は本質的に同じであり、条件によっては実際に正しいと主張する人もいます。
区切り文字(フロンティア)の最初の感覚(上記)とまったく同じです。
したがって、separator
は、多くのコンピューターで使用される区切り文字のsynonymです。
個々の「フィールド」の終わりを区別します。
Unixテキストファイルの改行のように。各行は改行(\n
)。
適切なUnixテキストファイルではall行が終了します(最後の行も)。同様の段落は、人間の言語の改行で終了します。
または、 より厳密には 、NULとして(\0
)は C文字列のターミネータ :
文字列は、最初のゼロコードユニット(多くの場合、NULコードユニットと呼ばれます)によって、コードユニットの連続したシーケンスとして定義されます終了。
したがって、ターミネータ文字も区切り文字ですが、mustも最後に表示されます。
Stackoverflowには、区切り文字と区切り文字専用のタグがあります
区切り文字 区切り文字は、プレーンテキストまたはその他のデータストリーム内の個別の独立した領域間の境界を指定するために使用される1つ以上の文字のシーケンスです。
separator 文字列の一部を区切る文字。
ターミネータータグは、シェルターミナルエミュレーターにのみ適用されます。
ターミネーター ターミネーターはGPLターミナルエミュレーターです。
そして、はい、区切り文字と区切り文字は何倍も同等です
except括弧、中括弧、角括弧、および同様のバランスの取れた区切り文字。
興味深い質問と回答。要約すると、1)区切り文字は、何かの「限界」、つまり開始および/または終了をマークします。 2)ターミネータは、「終了区切り文字」の単なる特別な用語です。 3)セパレーターは、(区切り文字とは異なり)両側にアイテムがあることを伴います。
開始区切り文字について考えることができる最良の例は、プログラミング言語( "#"、 "//"など)の開始コメントマーカーです。
ターミネータ(終了区切り文字)について考えることができる最良の例は、Unixの改行文字です。これは誤った呼び方です。常に(空の可能性がある)行を終了しますが、常に新しい行を開始するとは限りません。つまり、ファイルの最後の文字である場合です。おそらく、より一般的な例は、文の単純なピリオドです。
区切り文字について考えることができる最良の例は、単純なコンマです。カンマは、前後にテキストなしで英語で表示されることはありません。
これらのいずれも必ずしも1文字に限定されていないことに注意してください。実際、Unixのawk(またはgawkのみ?)では、FS(フィールド区切り文字)を任意の正規表現にすることができます。
また、「ゼロ以外の量の空白」は「単語区切り文字」と見なされますが、たとえば、 wcコマンドの場合、正規表現には幅ゼロの「単語境界」指定子もあります(例:\ b)。そのようなゼロ幅のアイテム/境界も「区切り文字」と見なすことができるかどうかを考えるのは興味深いことです。私はそうは思わない傾向があります(あまりにも多くのストレッチ)。