हिन्दी

डेवलपर टूल · पाठ तुलना

विंडोज और Unix लाइन एंडिंग्स पर असहमत क्यों हैं: CR, LF और CRLF कहानी

· पेजभूमि

पाठ-अंतर पंक्ति-अंत सॉफ्टवेयर-इतिहास

तीन न्यूलाइन मार्कर पथ पाठ पंक्तियों की एक ही जोड़ी में परिवर्तित हो रहे हैं
मूल ToolAcre वेक्टर चित्रण

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

एक अदृश्य चरित्र, दशकों का घर्षण - लगातार क्रॉस-प्लेटफ़ॉर्म झुंझलाहट के साथ खुलता है

सामान्य एडिटर में लाइन के अंत अदृश्य होते हैं फिर भी फाइलों और प्रोटोकॉल के लिए मायने रख सकते हैं। हालाँकि, ToolAcre में, CR, LF और CRLF को लाइन तुलना से पहले सामान्यीकृत किया जाता है। केवल उन विभाजकों में भिन्नता वाला एक जोड़ा समान पंक्ति सरणी और एक समान परिणाम उत्पन्न करता है।

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

टाइपराइटर पर कैरिज रिटर्न और लाइन फीड - मूल रूप से वर्णित पात्रों की दो शारीरिक क्रियाओं की व्याख्या करता है

कैरिज रिटर्न और लाइन फीड शब्दों के भौतिक और ऐतिहासिक अर्थ हैं, लेकिन भंडार में कोई टाइपराइटर स्रोत नहीं है। स्मृति से किसी यांत्रिक उत्पत्ति की कहानी को दोहराना साक्ष्य अनुबंध का उल्लंघन होगा, भले ही खाता परिचित लगे।

इसलिए यह लेख CR को ` ` code unit और LF को ` ` तभी मानता है जहाँ implementation उनका इस्तेमाल करता है। ऐतिहासिक व्याख्या बाद में primary standard या archive से जोड़नी चाहिए, किसी ऐसे outline से नहीं जो खुद source नहीं है।

टाइपराइटर अर्थ ऐतिहासिक दावे हैं जिनके लिए बाहरी स्रोतों की आवश्यकता होती है

इसी तरह, स्रोत फ़ाइलें टेलेटाइप सम्मेलनों या प्रारंभिक ऑपरेटिंग-सिस्टम निर्णयों का दस्तावेजीकरण नहीं करती हैं। वे वर्तमान JavaScript में केवल एक संगतता विकल्प प्रकट करते हैं: विभाजन से पहले प्रत्येक CRLF या अकेले CR को LF से बदलें।

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

टेलेटाइप और ऑपरेटिंग-सिस्टम वंशावली भंडार साक्ष्य के बाहर है

Unix को LF के साथ, विंडोज़ को CRLF के साथ और पुराने सिस्टम को लोन CR के साथ जोड़ना आम बात है, लेकिन वर्तमान रिपॉजिटरी उन अपनाने के ऐतिहासिक प्रमाण के रूप में काम नहीं कर सकती है। सुरक्षित दावा चालू है: सभी तीन इनपुट `splitLines` के अंदर LF बन जाते हैं।

एक टर्मिनल LF अंतिम खाली पंक्ति नहीं बनाता है, जबकि बीच में खाली रेखाएं बनी रहती हैं। इस भेद का अर्थ है कि भौतिक विभाजक अंतर मिट जाने पर भी तार्किक सामग्री बरकरार रहती है। तुलना रेखा-उन्मुख है, बाइट-संरक्षण नहीं।

कोड तीन सम्मेलनों को सामान्यीकृत साबित करता है; यह साबित नहीं होता कि सिस्टम ने उन्हें क्यों अपनाया

कुछ नेटवर्क और संदेश प्रोटोकॉल सटीक लाइन टर्मिनेटर निर्दिष्ट करते हैं, लेकिन उनकी आवश्यकताएं उनके विनिर्देशों से आनी चाहिए। ToolAcre का सामान्यीकरण ऐसे तार प्रारूप के अनुरूपता साबित करने के लिए अनुपयुक्त बनाता है क्योंकि मूल विभाजक साक्ष्य जानबूझकर हटा दिया जाता है।

सटीक CRLF अनुक्रम मायने रखने पर पार्सिंग से पहले हेक्स व्यूअर या प्रोटोकॉल सत्यापनकर्ता का उपयोग करें। एक साफ़ टेक्स्ट अंतर परिणाम मिलान वाली तार्किक रेखाओं की पुष्टि कर सकता है और साथ ही परिवहन-स्तर के दोष को छुपा सकता है। दोनों अवलोकन सत्य हो सकते हैं क्योंकि टूल विभिन्न प्रश्नों के उत्तर देते हैं।

प्रोटोकॉल आवश्यकताओं के लिए अपने स्वयं के विनिर्देशों की आवश्यकता होती है और इन्हें यहां छोड़ दिया गया है

`alpha beta`, `alpha beta` और `alpha beta` को जोड़ी-दर-जोड़ी तुलना करें। हर रूप दो line—alpha और beta—बनाता है, और कुछ जोड़ा या हटाया नहीं जाता। यह समानता “ignore whitespace” से नहीं आती; line बाँटते समय normalization पहले ही हो चुका है।

एक बीटा पंक्ति में अनुगामी स्थान जोड़ें और सामान्य मोड अब एक अंतर की रिपोर्ट करेगा। व्हाइटस्पेस को अनदेखा करें सक्षम करें और यह गायब हो सकता है। अनुक्रम न्यूलाइन हैंडलिंग को लाइन-की व्हाइटस्पेस हैंडलिंग से अलग करता है और गलत विकल्प को क्रेडिट करने से रोकता है।

कार्यान्वित उदाहरण: सभी तीन अंतिम फॉर्म व्हाइटस्पेस विकल्पों से पहले समान रूप से तुलना करते हैं

यह मार्ग एडिटर को कॉन्फ़िगर नहीं करता है, फ़ाइलों को फिर से नहीं लिखता है, Git विशेषताएँ सेट नहीं करता है या बल्क-कन्वर्ट एंडिंग्स सेट नहीं करता है। यह परिणाम पंक्तियों में मूल विभाजक को भी उजागर नहीं करता है। चिपकाए गए तार एक तुलना पाइपलाइन में प्रवेश करते हैं, न कि न्यूलाइन माइग्रेशन उपयोगिता में।

ऐतिहासिक कारण और प्रोटोकॉल मानकों को लंबित स्रोतों से हटा दिया गया है। वह संयम एक छोटा लेकिन सटीक लेख छोड़ता है: इस कार्यान्वयन में तीन सम्मेलन क्या करते हैं, कौन सी रिक्त रेखाएँ रहती हैं और यहाँ समानता बाइट पहचान स्थापित क्यों नहीं करती है।

टेकअवे: जानें कि आपका पाठ किस परंपरा को अपनाता है - इतिहास का सारांश देता है और कैसे ToolAcre की पाठ तुलना यह पुष्टि करने में मदद करती है कि अंतर केवल पंक्ति अंत का है या नहीं

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

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