2012-02-02 24 views
16

"डेलीमीटर", "टर्मिनेटर" और "सेपरेटर" शब्दों के उपयोग के पीछे अर्थशास्त्र क्या हैं? उदाहरण के लिए, मेरा मानना ​​है कि प्रत्येक टोकन और प्रत्येक टोकन के बीच विभाजक के बाद टर्मिनेटर होता है। क्या इनमें से किसी एक के रूप में एक delimiter समान है, या वे बस एक delimiter के रूप में हैं?"डेलीमीटर", "टर्मिनेटर," और "विभाजक"

SO में तीनों के रूप में टैग हैं, फिर भी वे एक-दूसरे के समानार्थी नहीं हैं। क्या ऐसा इसलिए है क्योंकि वे सभी वास्तव में अलग हैं?

उत्तर

11

तकनीकी रूप से एक डिलीमीटर चीजों के बीच जाता है, शायद आपको यह बताने के लिए कि एक फ़ील्ड कहां समाप्त होता है और दूसरा शुरू होता है, जैसे कॉमा से अलग-अलग मूल्य (सीएसवी) फ़ाइल में।

एक टर्मिनेटर कुछ के अंत में चला जाता है, जो लाइन/इनपुट/जो कुछ भी समाप्त करता है।

एक विभाजक एक डिलीमीटर या कुछ और चीजों को अलग करता है जो कुछ भी हो सकता है। उदाहरण के लिए अंग्रेजी भाषा में शब्दों के बीच की जगहों पर विचार करें।

आप तर्क दे सकते हैं कि एक न्यूलाइन कैरेक्टर एक लाइन टर्मिनेटर है, लाइनों का एक डिलीमीटर या कुछ जो दो पंक्तियों को अलग करता है। इस कारण से यूनिकोड विनिर्देश में कुछ अलग-अलग न्यूलाइन-प्रकार वर्ण हैं।

+0

तो, एक डिलीमीटर और विभाजक के बीच क्या अंतर है? आपकी व्याख्या का अर्थ यह है कि सीएसवी और अंग्रेजी में रिक्त स्थान दोनों अल्पविराम और विभाजक दोनों हैं; क्या ये सही है? – musiphil

+0

हां, वे बहुत अधिक वही अर्थ रखते हैं। सीएसवी फाइलों की तरह तारों को सीमित करना आपको बताता है कि डेटा की सीमाएं कहां हैं। संक्षेप में अलग-अलग प्रभावों के बावजूद शर्तें व्यापक रूप से समकक्ष हैं। इयान डिकिंसन का जवाब अंतर का एक और पूर्ण स्पष्टीकरण प्रदान करता है। – IanGilham

18

एक डिलीमीटर कुछ की सीमाओं को इंगित करता है, जहां यह शुरू होता है और यह कहां समाप्त होता है। उदाहरण के लिए:

"this is a string" 

में दो डिलीमीटर हैं, जिनमें से दोनों डबल-कोट चरित्र होते हैं। Delimiters इंगित करता है कि चीज़ का हिस्सा क्या है, और क्या नहीं है।

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

एक विभाजक की भूमिका दो अलग-अलग संस्थाओं हदबंदी के लिए इतना है कि वे प्रतिष्ठित किया जा सकता है:

एक विभाजक एक क्रम में दो बातें अलग करता है। (ध्यान दें कि मैं "दो" कहता हूं क्योंकि कंप्यूटर विज्ञान में हम आमतौर पर पात्रों के रैखिक अनुक्रम को संसाधित करने के बारे में बात कर रहे हैं)।

एक टर्मिनेटर अनुक्रम के अंत को इंगित करता है। एक सीएसवी में, आप एक लाइन पर रिकॉर्ड को समाप्त करने के रूप में, या अगले एक रिकॉर्ड को अलग करने के रूप में नई लाइन के बारे में सोच सकते हैं।

टोकन सीमाएं अक्सर वाक्य रचना वर्गों में बदलाव से चिह्नित हैं:

foo() 

संभावना के रूप में word(foo), lparen, rparen tokenised किया जाएगा - वहाँ नहीं टोकन के बीच कोई स्पष्ट परिसीमक हैं, लेकिन एक tokenizer पहचान अल्फा और विराम चिह्नों के बीच व्याकरण वर्गों में परिवर्तन।

श्रेणियां पूरी तरह से अलग नहीं हैं। उदाहरण के लिए:

[red, green, blue] 

(आपके वाक्यविन्यास के आधार पर) तीन वस्तुओं की सूची हो सकता है; ब्रैकेट सूची को सीमित करते हैं और दायां-ब्रैकेट सूची को समाप्त करता है और blue टोकन के अंत को चिह्नित करता है।

एसओ के टैग के रूप में उन शब्दों के उपयोग के लिए, वे बस हैं: टैग एक प्रश्न के विषय को इंगित करने के लिए। टैग के लिए एक एकीकृत एकीकृत नियंत्रित शब्दावली नहीं है; पर्याप्त कर्म वाला कोई भी नया टैग जोड़ सकता है। शब्दावली में पर्याप्त मतभेद मौजूद हैं कि आपके पास एसओ कवर के सभी विषयों पर एक भी नियंत्रित टैग शब्दावली नहीं हो सकती है।

+0

"delimiter" की यह परिभाषा [विकिपीडिया के] (https://en.wikipedia.org/wiki/Delimiter) के अनुरूप नहीं है। वहां, एक "डिलीमीटर" बहुत अधिक शामिल होता है जिसे आप "विभाजक" कहते हैं। –

0

दिलचस्प प्रश्न और उत्तर। संक्षेप में, 1) डेलीमीटर कुछ की "सीमा" को चिह्नित करता है, यानी शुरुआत और/या अंत; 2) टर्मिनेटर "एंड डेलीमीटर" के लिए सिर्फ एक विशेष शब्द है; 3) विभाजक के पास दोनों तरफ से आइटम होते हैं (डेलीमीटर के विपरीत)।

सर्वश्रेष्ठ उदाहरण मैं एक प्रारंभिक डिलीमीटर के लिए सोच सकता हूं प्रोग्रामिंग भाषाओं ("#", "//", आदि) में प्रारंभ-टिप्पणी मार्कर है।

सर्वश्रेष्ठ उदाहरण मैं टर्मिनेटर (एंड डेलीमीटर) के बारे में सोच सकता हूं यूनिक्स में न्यूलाइन चरित्र है। यह एक गलत नाम है - यह हमेशा एक (संभवतः खाली) रेखा को समाप्त करता है लेकिन हमेशा एक नई लाइन शुरू नहीं करता है, यानी जब यह फ़ाइल में अंतिम अक्षर होता है। शायद एक बेहतर आम उदाहरण वाक्य के लिए सरल अवधि है।

सर्वश्रेष्ठ उदाहरण मैं एक विभाजक के बारे में सोच सकता हूं सरल कॉमा है। ध्यान दें कि कॉमा कभी भी पहले और बाद में बिना पाठ के अंग्रेजी में दिखाई देता है।

यह ध्यान रखना दिलचस्प है कि इनमें से कोई भी एकल-चरित्र तक सीमित नहीं है। वास्तव में यूनिक्स में अजीब (या शायद केवल गॉक?) एफएस (फ़ील्ड सेपरेटर) को किसी भी regexp होने की अनुमति देता है।

इसके अलावा, हालांकि "व्हाइटस्पेस की किसी भी गैर-शून्य राशि" को "शब्द डेलीमीटर" माना जाता है। wc कमांड, regexps में शून्य-चौड़ाई "शब्द सीमा" विनिर्देशक भी हैं (उदा। \ b)। इस बात पर विचार करना दिलचस्प है कि ऐसी शून्य-चौड़ाई वाली वस्तुओं/सीमाओं को "डिलीमीटर" भी माना जा सकता है या नहीं। मुझे लगता है कि नहीं (एक खिंचाव का बहुत अधिक)।

0

जब आप खाली से शुरू करते हैं तो टर्मिनेटर विभाजक होते हैं। एक बी, सी, वास्तव में ए; बी; सी; खाली है।

0

यह प्रतिक्रिया सीएसवी के संदर्भ में है क्योंकि सभी प्रदान किए गए उत्तर इसके बजाय अंग्रेजी भाषा पर केंद्रित हैं।

सीमांकक सभी तत्वों को दी गई CSV विनिर्देश में उल्लेख किया है कि सामान की सीमाओं, विभाजक का वर्णन क्षेत्र सीमांकक, टर्मिनेटर्स रिकॉर्ड सीमांकक के लिए एक आम नाम है के लिए एक आम नाम है कर रहे हैं।


सीमान्तक सीएसवी प्रारूप विनिर्देशन के एक हिस्से में, यह सीमाओं को परिभाषित करता है और एक मुद्रण योग्य चरित्र होना जरूरी नहीं है।

टर्मिनेटर, विभाजक और फ़ील्ड क्वालीफायर डिलीमीटर हैं लेकिन एक CSV प्रारूप निर्दिष्ट करने के लिए आवश्यक नहीं हैं, उदा। 50 कॉलम डिलीमीटर का मतलब है कि प्रत्येक 50 कॉलम एक मान हैं - प्रत्येक पंक्ति में आमतौर पर 0-49 से वर्ण (आमतौर पर सफेद स्थान से भरा) फ़ील्ड 0 का मान होता है और 50-99 के वर्ण फ़ील्ड 1 का मान होते हैं।

टर्मिनेटर एक डिलीमीटर होता है जिसे आमतौर पर लाइन फीड (LF), कैरिज रिटर्न (CR) या संयोजन (उदाहरण के लिए CRLF) द्वारा दर्शाया जाता है और एकल सीएसवी रिकॉर्ड के अंत को चिह्नित करता है।

सेपरेटर एक डिलीमीटर है जिसे मुद्रित चरित्र (उदाहरण के लिए अर्धविराम) द्वारा दर्शाया जाता है और सीएसवी क्षेत्रों के बीच विभाजन को चिह्नित करता है, इसे गतिशील लंबाई मानों को स्टोर करने के लिए पेश किया गया है। विभाजक के बिना सीएसवी प्रारूप विनिर्देशों में आमतौर पर स्थिर क्षेत्र की लंबाई होती है।

फ़ील्ड क्वालीफायर आमतौर पर बचने के क्रम के बजाय जोड़ों में उपयोग किया जाने वाला एक डिलीमीटर होता है, यह एक प्रिंट करने योग्य चरित्र होता है जिसे फ़ील्ड मान में अनुमति नहीं दी जाती है (जब तक सीएसवी प्रारूप विनिर्देश बचने का अनुक्रम प्रदान नहीं करता) और शुरुआत और अंत को चिह्नित करता है एक क्षेत्र के, इसे विभाजक वाले मूल्यों को स्टोर करने के लिए पेश किया गया था।

एस्केप अनुक्रम एक वर्ण (या वर्णों का एक सेट) है जो कि किसी भी चीज को अनदेखा करता है जो कि गैर-महत्वपूर्ण के रूप में होता है और फील्ड मान के हिस्से के रूप में होता है (उदाहरण के लिए बैकस्लैश तत्काल निम्नलिखित विभाजक को एक भाग के रूप में निर्दिष्ट कर सकता है महत्व)। यह अनुक्रम एक या एकाधिक वर्णों से बच सकता है।

1

डिलीमीटर एक या दो मार्कर है जो कुछ की शुरुआत और अंत दिखाता है। उनकी आवश्यकता है क्योंकि हम नहीं जानते कि कितना समय होगा 'कुछ' होगा। 1. एक एकल सीमांकक, या 2. जोड़ी-डिलीमीटर

  • [a, b, c, d, e] प्रत्येक अल्पविराम (,) की एक जोड़ी एक एकल सीमांकक है: हम या तो हो सकता है। बाएं और दाएं ब्रैकेट, ([, ]) जोड़ी-डिलीमीटर हैं।
  • "hello", दो उद्धरण चिन्हों (") जोड़ी-डिलीमीटर हैं

एक विभाजक एक "सीमांकक" का एक पर्याय है, लेकिन मेरे अनुभव से यह आम तौर पर क्षेत्र को संदर्भित करता है delimiters। एक फील्ड डेलीमीटर एक फ़ील्ड और उसके बाद एक के बीच विभाजक के रूप में कार्य करता है, यही कारण है कि उन्हें "अलग" करने के बावजूद भी हो सकता है।

  • <file1>␜<file2>␜<file3>, फ़ाइल विभाजक वर्ण (), स्पष्ट रूप से नाम होने "विभाजक", के बावजूद दोनों एक सीमांकक और एक विभाजक

एक टर्मिनेटर के निशान है चीजों के एक समूह के अंत, फिर से जरूरी है क्योंकि हम नहीं जानते कि यह कितना समय है।

  • abdefa\0, यहाँ अशक्त चरित्र \0 एक टर्मिनेटर हमें बताता है कि स्ट्रिंग समाप्त हो गया है है।
  • foo\n, यहां न्यूलाइन कैरेक्टर \nटर्मिनेटर है जो हमें बताता है कि लाइन समाप्त हो गई है।

शर्तों, सीमांकक, विभाजक भंडारण के शास्त्रीय विचार से ही शुरू धारणात्मक, फ़ाइलें, रिकॉर्ड, और खेतों के शामिल किया जा रहा है (एक फ़ाइल कई रिकॉर्ड है, एक रिकॉर्ड कई क्षेत्रों है) । इस संदर्भ में, एक एकल डिलीमीटर और जोड़ी-डिलीमीटर को रिकॉर्ड डिलीमीटर और फ़ील्ड डिलीमीटर कहा जा सकता है। फाइल-रिकॉर्ड्स-फील्ड वर्गीकरण के ऐतिहासिक महत्व के कारण, इस शब्द का अधिक व्यापक उपयोग होता है (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 रूप में हम जानते ही परिसीमक हैं, लेकिन वे भी एक कहा जा सकता है रिकॉर्ड delimiters और क्षेत्र delimiters क्रमशः।


जटिल नेस्टेड संरचनाओं के लिए, एक टर्मिनेटर भी एक सीमांकक/विभाजक (वे परस्पर अनन्य परिभाषाएँ नहीं कर रहे हैं) हो सकता है। पिछले उदाहरण से, फ़ाइल के अंदर से === मार्कर को टर्मिनेटर माना जा सकता है (यह फ़ाइल फ़ाइल का अंत है)। लेकिन जब हम कई फाइलों को देखते हैं, तो === एक डिलीमीटर/विभाजक की तरह कार्य करता है।

  • एक UNIX फ़ाइल की पंक्तियों पर विचार करें

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

    नई-पंक्तियों दोनों टर्मिनेटर्स हैं (वे हमें बताते हैं जहां स्ट्रिंग समाप्त होता है) और परिसीमक हैं (वे हमें बताते हैं जहाँ प्रत्येक पंक्ति शुरू होता है और समाप्त होता है)। Wikipedia से:

    दो नई पंक्तियां देखने के विभिन्न तरीके, जो दोनों के आत्म-संगत कर रहे हैं, कर रहे हैं कि नई-पंक्तियों या तो अलग-अलग पंक्तियों या वे लाइनों को समाप्त करता है। और यह हूँ -

वास्तव में आप केवल कहने के लिए "टर्मिनेटर" जब आप एक-एक आइटम पर बात कर रहे हैं, (सिर्फ एक स्ट्रिंग 1234\0, बस एक लाइन abcd\n, आदि) की आवश्यकता होगी अस्पष्ट हो कि इस संदर्भ में टर्मिनेटर एक जटिल जटिल संरचना में एक डिलीमीटर भी हो सकता है।

0

"शब्द 1", "शब्द 2" \ शून्य

  1. शब्द उद्धरण से सीमांकित कर रहे हैं,
  2. अल्पविराम के द्वारा अलग,
  3. और पूरी बात \ शून्य से समाप्त हो जाता है।