अनुस्मारक - \ r \ n या \ n \ r?


390

मैं बस उन याद नहीं कर सकते। तो, पुराने ढंग के ASCII लाइनों को ठीक से समाप्त करने का सही तरीका क्या है?


11
यदि आप ऐसा करते हैं तो सुनिश्चित करें कि आप अपनी फ़ाइलों को बाइनरी मोड में खोलें । अन्यथा मानक C / C ++ फ़ाइल स्ट्रीम "\ n" (पाठ फ़ाइलों के लिए (डिफ़ॉल्ट)) को लाइन अनुक्रम (ELS) के एक विशिष्ट प्लेटफ़ॉर्म में परिवर्तित कर देगा। इस प्रकार विंडोज़ पर "\ r \ n" भौतिक डिस्क पर "\ r \ r \ n" में परिवर्तित हो जाएगा। नोट: यदि आप फ़ाइल वापस पढ़ने के लिए सिर्फ C / C ++ का उपयोग करते हैं तो आप नोटिस नहीं करेंगे क्योंकि फ़ाइल से पढ़ने पर ELS को वापस "\ n" में बदल दिया जाएगा।
मार्टिन

@Martin - मैं .net में हूँ, और (इस उदाहरण के लिए) File.AppendAllText का उपयोग कर रहा हूँ, "\ r \ n" के साथ, और मैंने अभी एक फ़ाइल पर एक नज़र डाली, और अंत में कोई \ r दोहराव नहीं है रेखा। जादू?
डैनियल मूसमंदर

@ डैनियल: मुझे और अधिक विशिष्ट होना चाहिए था। C / C ++ धाराओं। जब एक फ़ाइल के साथ जुड़ा हुआ है और पाठ मोड में खोला गया है । यह इस बात पर भी निर्भर करता है कि आप फ़ाइल को कैसे देखते हैं (एक हेक्सिडिटर का उपयोग करें)।
मार्टिन यॉर्क

@ मर्टिन - हेक्स मोड में पीएसडीपी का इस्तेमाल किया ...
डैनियल मूसेडर

1
प्राचीन कीबोर्ड पर, एंटर कुंजी को रिटर्न कुंजी कहा जाता था। इसलिए रिटर्न पहले आया, फिर जवाब में लाइनफेड उत्पन्न हुआ। यह बहुत स्पष्ट है जब आपके पास बहुत अधिक इतिहास है।
मार्क रैनसम

जवाबों:


1084

मैं याद करने के लिए ' r etur n ' शब्द का उपयोग करता हूँ , r n से पहले आता है।


116
और यह याद रखने के लिए कि उपयोग करने वाला शब्द वापस आ गया है , याद रखें कि \ r गाड़ी वापसी है । याद नहीं है कि "रिटर्न" मैक कीबोर्ड पर कुंजी का नाम है, या फिर आप बाद में एक पीसी कीबोर्ड को देख सकते हैं, "एंटर" नामक कुंजी को देख सकते हैं और पत्र क्रम को गलत कर सकते हैं!
रोब कैनेडी

3
@ डेविड लेकिन मैं सोच रहा था कि इसका प्रभाव समान है \n\rऔर \r\nक्या ये समान प्रभाव नहीं डालते? क्या आप मुझे अंतर बता सकते हैं?
Mr.Anubis

7
@ Mr.Anubis यदि आपके पास कुछ डॉट मैट्रिक्स प्रिंटर है, तो कोई अंतर नहीं होना चाहिए, क्योंकि कमांड का क्रम महत्वपूर्ण नहीं होना चाहिए। हालाँकि, कुछ प्रिंटरों पर, आपको अतिरिक्त खाली लाइन, या कोई पंक्ति उन्नति नहीं मिलेगी। और कभी भी ऊपर कहा गया कि पाठ संपादकों पर लागू होता है - वे भ्रमित होंगे, टेक्स्टस्ट्रीम कक्षाएं बीमार हो जाएंगी, और इसी तरह। आदेश है महत्वपूर्ण। :)
डैनियल मूसमंदर

12
@ डैनियलमाउसमोर वैकल्पिक रूप से, आप बस याद कर सकते हैं कि आदेश impoRtaNt है। या कि जब आपने एसओ से पूछा तो किसी ने आपको रेमीडर दिया, जिसे आप बाद में भूल गए। या कि आप अपने उपनाम का उपयोग अनुस्मारक के रूप में नहीं कर सकते , क्योंकि r और n का क्रम उलट है :)
डैनियल डारनास 25'13

5
@RobKennedy हाहा आप जानते हैं कि मैं यहां आया और वापसी के बारे में पढ़ा, और सोचा "महान!"। तब मैंने आपकी टिप्पणी पढ़ी। अब हर बार मुझे याद नहीं आता कि मुझे किस कुंजी को नहीं देखना चाहिए - मैं अपनी "एंटर" कुंजी को देखता हूं और मुझे लगता है कि "यहां कुछ बहुत गलत है" ... यह सोचने पर हाहा!
वेन उरोदा

53

यदि आप C # का उपयोग कर रहे हैं Environment.NewLine, तो आपको इसका उपयोग करना चाहिए , जो MSDN के अनुसार है:

गैर-यूनिक्स प्लेटफार्मों के लिए "\ r \ n" स्ट्रिंग, या यूनिक्स प्लेटफार्मों के लिए "\ n" युक्त स्ट्रिंग।


46
वास्तव में इस तरह का निर्भर करता है कि आप क्या कर रहे हैं। यदि आप कंसोल के लिए या स्थानीय उपयोग के लिए फ़ाइल में सादे पाठ का उत्पादन कर रहे हैं, Environment.NewLineतो ठीक है। हालाँकि, यदि आप अच्छी तरह से परिभाषित प्रारूप में चीजें लिख रहे हैं, तो प्रारूप नई पंक्ति को भी परिभाषित कर सकता है। उदाहरण के लिए, HTTP प्रोटोकॉल बताता है कि आपको प्लेटफॉर्म की परवाह किए बिना हेडर आदि के लिए लाइन टर्मिनेटर के रूप में उपयोग करना चाहिए\r\n
मत्ती विर्ककुनेन

3
हाँ, यह वास्तव में बुरी सलाह है।
इवानपी

यही कारण है कि आपको अपने वेब संदेशों से बचने और इकाई परीक्षण बनाने के लिए \ r \ n (विंडोज़), \ r (मैक), \ n (linux) को वेबसर्वर को \ r \ n के रूप में ठीक से भेजने के लिए सत्यापित करने की आवश्यकता है।
TamusJRoyce

37

नई लाइन आपके OS पर निर्भर करती है:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

अधिक विवरण यहां: https://ccrma.stanford.edu/~craig/utility/flip/

जब संदेह हो, तो किसी भी फ्रीवेयर हेक्स दर्शक / संपादक का उपयोग करके देखें कि कोई फ़ाइल अपनी नई लाइन को कैसे एनकोड करती है।

मेरे लिए, मुझे याद रखने में मदद के लिए मैं निम्नलिखित गाइड का उपयोग करता हूं: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n e feed


7
अजीब तरह से, मैं इन लोगों में से एक हूं, जो 0D0Aदिल से जानते हैं , लेकिन फिर भी भ्रमित करते हैं \rऔर \n
Nyerguds

1
या, मुझे याद है कि \ r कैरिज रिटर्न है और \ n लाइन फीड है ... यह सिर्फ मुझे उनके आदेश को याद नहीं है, इसलिए यह याद रखने में मदद नहीं करता है कि कौन सा 0 डी है और कौन सा 0 ए है;)
Nyerguds

20

अनुक्रम सीआर (कैरिज रिटर्न) - एलएफ (लाइन फीड) है। डॉट मैट्रिक्स प्रिंटर याद रखें? बिल्कुल सही। तो - सही क्रम \ r \ n है


मुझे लगता है कि यह सबसे तार्किक जवाब है
डेविड स्नेबल-कॉंट

12
LF + CR प्रिंटर पर एक ही CR + LF करेगा।
इकेगामी

10
मैं असहमत हूं, @ डेविड। डॉट-मैट्रिक्स प्रिंटर (या टाइपराइटर के बारे में, उस मामले के लिए, क्योंकि वे वापस जाने के लिए एक गाड़ी है, जो पर्याप्त नहीं है) के बारे में सोच रहे हैं। वे कैसे काम करते हैं, इसके बारे में केवल बुनियादी जानकारी के साथ, यह सोचने का कोई कारण नहीं है कि यह मायने रखता है कि क्या हम लाइन के शुरू होने से पहले या बाद में पेपर को आगे बढ़ाते हैं। दोनों \ r \ n और \ n \ r ने कागज को एक ही स्थिति में रखा।
रोब कैनेडी

सबसे अधिक प्रिंटर पर @ikegami , उन सभी पर नहीं। उनके पास उस व्यवहार को कॉन्फ़िगर करने के लिए डीआईपी स्विच भी थे। :)
डैनियल मूसमेडर

5
गाड़ी की वापसी के बाद लाइन फीड लगाने का एक कारण यह है कि कुल आवश्यक समय कम हो जाता है - जबकि सिर कागज के बाएं किनारे पर लौट रहा है, प्लेटन एक पंक्ति को अनुक्रमित कर सकता है। लंबा ऑपरेशन पहले शुरू होता है, इसलिए पूरा ऑपरेशन उस समय में पूरा होता है जब इसे निष्पादित करने में अधिक समय लगता है। हमने उस समय जैसे कारणों के लिए बहुत कुछ किया; कल्पना कीजिए कि 110 बॉड में सौ लाइनों के जोड़े की प्रतीक्षा की जा रही है ...
जैरी एंड्रयूज

8

किसी भी .NET लैंग्वेज में, Environment.NewLineबेहतर होगा।


निरंतर तारों के लिए काम नहीं करता है। जरूरत पड़ने पर, निरंतर उपयोग न करने और इसके बजाय स्थैतिक स्ट्रिंग का उपयोग करने के लिए बेहतर है;)
TamusJRoyce

5

मैन्युअल रूप से ऐसा करने से सावधान रहें।
वास्तव में मैं ऐसा नहीं करने की सलाह दूंगा ।

वास्तव में हम लाइन टर्मिनेशन सीक्वेंस एलटीएस के बारे में बात कर रहे हैं जो प्लेटफॉर्म के लिए विशिष्ट है।

यदि आप टेक्स्ट मोड में फ़ाइल खोलते हैं (अर्थात बाइनरी नहीं) तो स्ट्रीम आपके प्लेटफॉर्म के लिए "\ n" को सही LTS में बदल देगी। जब आप फ़ाइल पढ़ते हैं तो LTS को वापस "\ n" में बदल दें।

परिणामस्वरूप यदि आप "\ r \ n" विंडो फ़ाइल में प्रिंट करते हैं, तो आपको भौतिक फ़ाइल में अनुक्रम "\ r \ r \ n" मिलेगा (एक हेक्स संपादक के साथ एक नज़र रखना)।

बेशक यह असली दर्द है जब प्लेटफार्मों के बीच फ़ाइलों को स्थानांतरित करने की बात आती है।

अब अगर आप किसी नेटवर्क स्ट्रीम को लिख रहे हैं तो मैं इसे मैन्युअल रूप से करूँगा (क्योंकि अधिकांश नेटवर्क प्रोटोकॉल इसे विशेष रूप से कहते हैं)। लेकिन मुझे यकीन है कि धारा कोई व्याख्या नहीं कर रही है (इसलिए बाइनरी मोड उपयुक्त थे)।


4

\r\n विंडोज के लिए बस ठीक है।


\nनोटपैड के लेटेस्ट वर्जन सहित, विंडोज़ पर भी सिंगल ही ठीक रहता है।
एंड्रे कारन

मुझे लगता है कि आधुनिक संपादक लाइन एंडिंग का पता लगाएंगे, क्योंकि विभिन्न ओएस अलग-अलग एंडिंग का उपयोग करते हैं।
डेविड स्नेबल-कॉंट

1
वास्तव में नहीं: यदि आप इसे एक फ़ाइल (टेक्स्ट मोड में खोली गई सी / सी ++ फ़ाइल) पर प्रिंट करते हैं, तो भौतिक फ़ाइल में "\ r \ r \ n" होगा (इसे एक हेक्स संपादक के साथ जांचें)। जब आप इसे वापस पढ़ते हैं तो "\ r \ n" वापस एकल "\ n" में परिवर्तित हो जाता है।
मार्टिन यॉर्क

2
दरअसल, @DavidCaunt, मैंने सिर्फ \ n की कोशिश की और यह Win8 पर नोटपैड के साथ काम नहीं करता है।
philk

4

से विकिपीडिया (आप पढ़ सकते हैं जो उस लेख पर अपने ओएस के लिए सही है):

ASCII या एक संगत वर्ण सेट पर आधारित सिस्टम LF (लाइन फीड, '\ n', 0x0A, 10 दशमलव में) या CR (कैरिज रिटर्न, '\ r', 0x0D, 13 दशमलव में 13) व्यक्तिगत रूप से या CR द्वारा उपयोग किया जाता है। LF (CR + LF, '\ r \ n', 0x0D0A)।


3

\r\n

अजीब कहने के लिए मैं इसे याद करता हूं क्योंकि यह मेरे द्वारा उपयोग किए जाने वाले टाइपराइटर के विपरीत है
खैर अगर यह सामान्य था तो मुझे इसे याद रखने की कोई आवश्यकता नहीं थी ...:-)

विकिपीडिया से टाइपराइटर * छवि विकिपीडिया से

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

आप इस रिकॉर्ड को freesound.org से सुन सकते हैं शुरुआत में पेपर फीडिंग की आवाज़, और अंत से लगभग -1: 03 सेकंड पर, ड्रम की लाइन साउंड के अंत के लिए घंटी की चेतावनी के बाद जो रोल करता है और उसके बाद गाड़ी में से एक वापसी।


2

यदि आप C # का उपयोग कर रहे हैं, तो उपयोग क्यों नहीं कर रहे हैं Environment.NewLine? (मुझे लगता है कि आप कुछ फ़ाइल लेखक ऑब्जेक्ट का उपयोग करते हैं ... बस इसे पास करें Environment.NewLineऔर यह सही टर्मिनेटर को संभाल लेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.