náhled|vpravo|200px|Výřez ze souboru ve formátu CSV. Čárky (vyznačené červeně) se používají jako oddělovače polí. Oddělovač () nebo separátor je znak nebo posloupnost znaků sloužící pro zadání hranice mezi zvláštními, nezávislými oblastmi v prostém textu nebo v jiných datových proudech. Příkladem oddělovače je znak čárka, který se používá jako oddělovač polí ve formátu CSV (hodnoty oddělené čárkami). Jiným příkladem oddělovače je časová prodleva používaná pro oddělování písmen a slov v Morseově abecedě.

Oddělovače jsou jedním z mnoha prostředků pro zadání hranic v datovém proudu. Jinou metodou je deklarativní notace, ve které je na začátku datového proudu uvedeno, kolik znaků proud obsahuje. Popisuje metodu v Hollerithově notaci v programovacím jazyce Fortran.

Rozdělení oddělovačů Oddělovače lze rozdělit na:

oddělovače polí a záznamů párové (závorkové) oddělovače

Oddělovače polí a záznamů Oddělovače polí oddělují jednotlivá datová pole; oddělovače záznamů oddělují skupiny polí. p. 141

Například formát CSV používá čárky jako oddělovače polí a znaky konce řádku jako oddělovače mezi záznamy. Například: jméno,příjmení,věk,plat nancy,davolio,33,$30000 erin,borakova,28,$25250 tony,raphael,35,$28700 je jednoduchá tabulka ve formátu CSV v databázi tvořené obyčejnými soubory.

Párové oddělovače Párové oddělovače (také závorkové oddělovače, blokové oddělovače nebo oddělovače oblastí) označují začátek i konec oblasti textu. p. 319

Mezi závorkové oddělovače patří: Oddělovače Popis ( a ) Kulaté závorky. { a } Složené závorky. definuje programovací jazyky vycházející z jazyka C, které používají složené závorky a středníky pro oddělování příkazů. [ a ] Hranaté závorky (často používané pro vyznačení dolního indexu) < a > Špičaté závorky.Popisuje syntaxi a oddělovače používané v HTML. " a " Často používané pro řetězcové literály.Popisuje řetězcové literály. ' a ' Často používané pro znakové literály. <? a ?> Používané pro XML nebo SGML instrukce pro zpracování. Popisuje instrukce pro zpracování XML. p. 21. /* a */ Používané v některých programovacích jazycích pro komentáře. Popisuje jednořádkové a víceřádkové komentáře. p. 72. <% a %> Používané v některých WWW šablonách pro zadání hranic jazyků. Jsou také nazývány šablonové oddělovače. Viz například, Smarty šablona systém dokumentace, "escaping šablona oddělovače".

Pro vyznačení pořadí vyhodnocování se v počítačových jazycích používají na rozdíl od matematiky pouze kulaté závorky. Programovací jazyk Lisp se vyznačuje používáním velkého množství závorek. p. 3

Konvence Používání určitých oddělovačů na počítačových platformách je dáno konvencí.Mezinárodní organizace pro normalizaci (1. prosince 1975). "Sada řídicích znaků pro ISO 646 ". Internet PAssigned Numbers Authority Registry. Alternativní U.S. verze: . Accessed August 7, 2005. Následující tabulky ukazují pouze několik příkladů pro porovnání.

Programovací jazyky

Znakový literál Řetězcový literál Oddělovač příkazů Pascal apostrof apostrof středník C apostrof uvozovky středník

Oddělovače záznamů a polí

Konec pole Konec záznamu Konec souboru Unix, Mac OS X, Amiga OS Tab LF žádný Windows, MS-DOS, OS/2, CP/M Tab CRLF Control-Z Popisuje použití Ctrl-Z. p. 156, Classic Mac OS, AppleDOS, ProDOS, GS/OS Tab CR žádný ASCII/Unicode UNIT SEPARATORPozice 31 (U+001F) RECORD SEPARATORPozice 30 (U+001E) FILE SEPARATORPozice 28 (U+001C)

Kolize oddělovačů

Pokud samotná data obsahují znaky nebo posloupnosti používané jako oddělovače, dochází k jevu nazývanému kolize oddělovačů. popisuje řešení problémů s výskytem oddělovačů v datech. p. 472. U XML, HTML a SGML může dojít ke kolizi oddělovačů, pokud text obsahuje znaky špičaté závorky. U většiny typů souborů existují jak oddělovače polí tak oddělovače záznamů, a obojí může způsobit kolizi. V případě CSV souborů dojde ke kolizi, pokud položka obsahuje čárku (například mzda = "$30,000"), a ke kolizi oddělovačů záznamů dojde, pokud nějaké pole obsahuje více řádků. Kolize oddělovačů záznamů i polí se často objevuje v textových souborech.

Kolize oddělovačů mohou způsobit zranitelnost systémů, protože mohou být zneužity k exploitům. Zneužití kolizí oddělovačů v jazycích SQL a HTML jsou známy jako útoky SQL injection nebo cross-site scripting.

Řešení Protože kolize oddělovačů představují závažný problém, byly vyvinuty různé metody, jak jim zabránit. Někteří autoři se snaží vybírat oddělovače, které se v datovém proudu samotném nemohou objevit. Použití tohoto ad hoc přístupu nenabízí žádnou bezpečnost proti úmyslným kolizím. Proto se používají formal konvence jsou proto použitý také.

ASCII delimited text Znakové sady ASCII a Unicode obsahují netisknutelné znaky s kódy 28 až 31, které jsou určeny pro použití jako oddělovače:

Kód Jméno v Unicode Obvyklé jméno Použití 28 INFORMATION SEPARATOR FOUR Oddělovač souborů (FS) Konec souboru, nebo pro zřetězení dat, která by jinak mohla být zvláštními soubory. 29 INFORMATION SEPARATOR THREE Oddělovač skupin (GS) Mezi části dat. Nejsou potřebné v jednoduchých datových souborech. 30 INFORMATION SEPARATOR TWO Oddělovač záznamů (RS) Konec záznam nebo řádku. 31 INFORMATION SEPARATOR ONE Oddělovač jednotek (US) Mezi poli záznamu nebo prvky na řádku.

Použití znaku ASCII 31 Oddělovač jednotek jako oddělovače polí a ASCII 30 Oddělovač záznamů řeší problém oddělovačů polí i záznamů, které se vyskytují v textových datových proudech.Discussion on ASCII Delimited Text vs CSV a Tab Delimited

Použití únikových znaků

Jednou z metod pro zamezení kolizím oddělovačů je používání únikových znaků (). Používání escape znaků je dostačující z perspektivy návrhu jazyka, ale přinášejí různé nevýhody:

text plný escape znaků je těžko čitelný, problém označovaný jako (kvůli používání znaku \ pro escape / v regulárních výrazech v Perlu, což vede k posloupnostem jako je "\/\/"); text je obtížně analyzovatelný pomocí regulárních výrazů je třeba mechanismus pro „escapování escape znaků“, které nemají sloužit jako únikové znaky přestože je lze snadno zapsat, mohou být nesrozumitelné pro osoby neobeznámené s jazykem.p. 11 nechrání před code injection útoky

Escape posloupnosti Escape posloupnosti jsou podobné escape znakům, ale obvykle nejsou tvořeny jediným znakem, ale nějakou mnemonickou posloupností. Jedno použití je v řetězcových literálech, které zahrnuje znak uvozovky ("). Například následující kód v jazyce Perl:

print "Nancy zvolala \x22Ahoj!\x22 do davu."; ### použití \x22

produkuje stejný výstup jako:

print "Nancy zvolala \"Ahoj!\" do davu."; ### použití escape znaku

Nevýhodou escape posloupností je, že pokud je používají lidé, musí si pamatovat kódy, které reprezentují jednotlivé znaky (viz také: HTML entita, numerický znak reference).

Dvojí uvozovky V porovnání s escape posloupnostmi a escape znaky poskytuje dvojí uvozovky ještě další způsob, aby se zabránilo kolizi oddělovačů. Příkladem jsou jazyky, které umožňují jako omezovač řetězců používat jednoduchý apostrof (') i dvojité uvozovky ("). Například v jazyce Perl:

print 'Nancy zvolala "Ahoj!" do davu.';

produkuje požadovaný výstup bez potřeby použít escape znaky. Tento přístup však funguje pouze tehdy, když řetězec neobsahuje oba typy uvozovek.

Zdvojování párových oddělovačů Zdvojování párových oddělovačů uvnitř řetězců nebo jiných výrazů je alternativním postupem k používání escape posloupností a escape znaků pro zabránění kolizím oddělovačů. Visual Basic například používá dvojité uvozovky jako oddělovače. Toto je podobný escaping oddělovač.

print "Nancy zvolala ""Ahoj!"" do davu."

produkuje požadovaný výstup bez nutnosti používat escape znaky. Stejně jako normální escaping může být matoucí, pokud je potřeba použít příliš mnoho uvozovek. Kód pro výpis výše uvedeného zdrojového kódu by mohl být ještě více matoucí:

print "print ""Nancy zvolala """"Ahoj!"""" do davu."""

Vícero uvozovek V porovnání s dvojími uvozovkami je větší počet uvozovek ještě flexibilnější a tak lze ještě lépe zabránit kolizi oddělovačů. p. 63.

Následující příkazy v jazyce Perl:

print qq^Jan by moh' říct "Ahoj!".^; print qq@Jan by moh' říct "Ahoj!".@; print qq(Jan by moh' říct "Ahoj!".);

produkují požadovaný výstup díky použití quote operátorů, které umožňují, aby libovolný zvolený znak fungoval jako oddělovač. I když je tato metoda flexibilnější, podporuje ji poměrně málo jazyků, mezi něž patří Perl a Ruby. p. 62 V Ruby se používá název řetězce s obecným oddělovačem. p. 11

Hranice obsahu Hranice obsahu () je speciálním typem oddělovače, který je navržen tak, aby nezpůsoboval kolize oddělovačů. Umožňuje zadat libovolnou posloupnost znaků, která vždy indikuje hranice mezi částmi vícedílné zprávy, a neumožňuje žádnou jinou interpretaci. p. 26

Oddělovač často obsahuje náhodnou posloupnost znaků, tak dlouhou, že je statisticky nepravděpodobné, aby se objevila v datech. Může obsahovat další identifikaci jako UUID, časové razítko nebo jiný rozlišovač. Data, do kterých se vkládá oddělovač mohou být zkontrolována, aby se zajistilo, že oddělovače se náhodou nevyskytují v textu. To umožňuje používat kratší nebo jednodušší oddělovače a zvyšuje čitelnost dokumentu pro člověka. (Viz například, MIME, here-dokument).

Bílé znaky nebo odsazení Některé programovací a počítačové jazyky používají oddělovače tvořené bílými znaky nebo odsazováním jako prostředek popisující hranice mezi nezávislými oblastmi textu. Popisuje oddělovače tvořené bílými znaky. p. 258.

Syntaxe regulárních výrazů

Pro popis regulárních výrazů bývá možné používat alternativní oddělovače, které zjednodušují zápis operace srovnání nebo napasování regulárního výrazu na řetězec () a substituci v jazyce Perl. stránka 472.

Například jednoduché napasování řetězce na regulární výraz lze v Perlu zadat následujícím způsobem:

$string1 = 'Nancy zvolala „Ahoj!“ do davu.'; # definuje cílový řetězec print $string1 =~ m/[aeiou]+/; # vyhovuje jedna nebo více samohlásek

Perl umožňuje používat alternativní oddělovače, což přináší dostatečnou flexibilitu, aby se zabránilo kolizi oddělovačů:

$string1 = 'Nancy zvolala "http://Hello/World.htm" není povolená adresa.'; # cílový řetězec

print $string1 =~ m@http://@; # napasování pomocí alternativního oddělovače regulárního výrazu print $string1 =~ m{http://}; # totéž jako předchozí, ale jiný oddělovač print $string1 =~ m!http://!; # totéž jako předchozí, ale jiný oddělovač.

Here-dokument Here-dokument umožňuje vložení libovolného obsahu definováním speciálního konce posloupnost. Tuto metodu podporuje mnoho jazyků včetně PHP, bash skripty, Ruby a Perl. Here-dokument začíná popisem, jaká posloupnost jej bude ukončovat a pokračuje, dokud se zadaná posloupnost neobjeví na začátku nového řádku.Perl operátory a precedence

Příklad v jazyce Perl:

print <<ENDOFHEREDOC; Zapsat řetězec obsahující "určité znaky" je obtížné.

Znaky konce řádku, čárky a jiné znaky mohou způsobit kolizi oddělovačů. ENDOFHEREDOC

Tento kód vytiskne: Zapsat řetězec obsahující "určité znaky" je obtížné.

Znaky konce řádku, čárky a jiné znaky mohou způsobit kolizi oddělovačů.

Díky použití speciálního konce posloupnosti se mohou v řetězci objevit všechny uvedené znaky.

ASCII armor ASCII armoring se obvykle používá jako mechanismus pro textové kódování binárních dat. Jedná se techniku programování a správy systémů, která může v některé případech také zabránit kolizi oddělovačů.(příklad použití ASCII armoringu při šifrování)(příklad použití ASCII armoringu při šifrování) Tato technika je odlišena od jiných zde popsaných metod, protože je složitější a proto není vhodná pro malé aplikace a jednoduché formáty pro ukládání dat. Technika využívá speciální kódovací schéma, jako například base64, pro zajištění, že se oddělovač znaků neobjeví ve vysílaných datech.

Tato technika se používá například ve vývojových technologiích ASP.NET pro WWW firmy Microsoft a je těsně spojená s komponentou „VIEWSTATE“ tohoto systém.(popisuje použití kódování Base64 a VIEWSTATE ve zdrojovém kódu HTML)