\n
(न्यूलाइन) और \r
(कैरिज रिटर्न) में क्या अंतर है ?
विशेष रूप से, क्या और के बीच कोई व्यावहारिक अंतर हैं ? क्या ऐसे स्थान हैं जहां एक का उपयोग दूसरे के बजाय किया जाना चाहिए?\n
\r
\n
(न्यूलाइन) और \r
(कैरिज रिटर्न) में क्या अंतर है ?
विशेष रूप से, क्या और के बीच कोई व्यावहारिक अंतर हैं ? क्या ऐसे स्थान हैं जहां एक का उपयोग दूसरे के बजाय किया जाना चाहिए?\n
\r
जवाबों:
एससीआई कोड के संदर्भ में, यह 3 है - चूंकि वे क्रमशः 10 और 13 हैं ;-)।
लेकिन गंभीरता से, कई हैं:
\n
एंड-ऑफ-लाइन के लिए कोड है, \r
इसका मतलब कुछ खास नहीं है\n
लाइन के लिए मानक भागने का क्रम है (आवश्यकतानुसार ओएस-विशिष्ट अनुक्रमों से अनुवादित /)\r
इसके बजाय एंड-ऑफ-लाइन के लिए कोड था\r\n
इस क्रम में\r\n
इंटरनेट पर पाठ प्रारूपों के लिए मानक लाइन-समाप्ति है\r
गाड़ी को पीछे की ओर बाईं ओर जाने की आज्ञा देता है जब तक कि यह सबसे बाईं ओर (एक धीमी गति से संचालन) को हिट नहीं करता है, \n
रोलर को एक पंक्ति (बहुत तेज़ संचालन) को रोल करने की आज्ञा देता है - यही कारण है कि आपके पास हमेशा यही कारण होता है \r
पहले \n
, ताकि रोलर आगे बढ़ सके, जबकि गाड़ी अभी भी पीछे की ओर जा रही है! -) विकिपीडिया में अधिक विस्तृत विवरण दिया गया है ।\r
और \n
कर्सर के मामले में दोनों को छोड़कर इसी तरह काम करते हैं (, के रूप में वहाँ है कोई गाड़ी या रोलर ;-)व्यवहार में, पाठ फ़ाइल में लिखने के आधुनिक संदर्भ में, आपको हमेशा उपयोग करना चाहिए \n
(अंतर्निहित रनटाइम अनुवाद करेगा कि यदि आप एक अजीब ओएस, जैसे, विंडोज ;-) पर हैं। उपयोग करने का एकमात्र कारण यह \r
है कि यदि आप एक चरित्र टर्मिनल (या अधिक संभावना है कि "कंसोल विंडो" का अनुकरण कर रहे हैं) लिख रहे हैं और चाहते हैं कि अगली पंक्ति जो आप लिखते हैं, उसे लिखे (कभी-कभी नासमझ "ascii एनीमेशन के लिए प्रयुक्त) "जैसे प्रगति सलाखों के प्रभाव) - यह GUIs की दुनिया में बहुत अप्रचलित है, हालांकि ;-)।
\0
) को \n
अतिरिक्त अनुमति देने के लिए जोड़ा गया। समय। यह ओएस द्वारा पारदर्शी रूप से संभाला गया था ताकि आपको विरासत कोड में इसका कोई निशान न मिले।
\r
(मैं लिनक्स का उपयोग कर रहा हूँ) भूल गया । एक बार जब मैंने पार्स करना शुरू कर दिया, तो ऐसा प्रतीत होता है कि एक मान्य फ़ाइल मेरे पार्सर में विफल रही क्योंकि मैं जिस फ़ाइल को पार्स कर रहा था, वह विंडोज़ में बनाई गई है। : डी सभी में मुख्य समस्या यह है कि है कि न तो \n
या \r
अर्थ में दिखाई दे रहे हैं कि उदाहरण के लिए a
, .
, (
आदि पात्र हैं।
ऐतिहासिक \n
रूप से गाड़ी को नीचे ले जाने के लिए उपयोग किया जाता था, जबकि \r
गाड़ी को पृष्ठ के बाईं ओर वापस ले जाने के लिए उपयोग किया जाता था।
printf("abcdefghijlm\rNOP\n");
OpenSuSe पर gcc-8 के साथ संकलित इस C कोड पर विचार करें और इस आउटपुट में एक टर्मिनल परिणाम पर चलाएँ NOPdefghijlm
। लाइन (गाड़ी) की शुरुआत में कर्सर में स्ट्रिंग में \ r (गाड़ी वापसी) और (आर "यानी" एनओपी ") को अधिलेखित करने वाले अक्षर (यानी" एनओपी ") का अनुसरण करने वाले वर्णों का परिणाम होता है! आप बैकस्पेस (\ b) के साथ समान "कैरिज मूवमेंट" प्राप्त कर सकते हैं printf("abcdefghijlm\b\bNOP\n");
जिसमें उत्पादन होता हैabcdefghijNOP
दो अलग-अलग किरदार।
\n
यूनिक्स पाठ फ़ाइलों में एक लाइन-ऑफ-टर्म टर्मिनेटर के रूप में उपयोग किया जाता है
\r
मैक पाठ फ़ाइलों में एक अंत-लाइन लाइन टर्मिनेटर के रूप में उपयोग किया जाता है
\r\n
(यानी दोनों) का उपयोग विंडोज और डॉस टेक्स्ट फाइलों में लाइनों को समाप्त करने के लिए किया जाता है।
\r
लंबे समय से मैक पर लाइन-एंडिंग नहीं हुई है। 2001 में मैक ओएस एक्स की रिहाई के साथ (जो यूनिक्स-आधारित है), \n
अब उपयोग किया जाता है।
\r
- जैसे एमएस ऑफिस 2011 एक्सेल: एक सीएसवी सेव करना (सभी डिफ़ॉल्ट सेटिंग्स के साथ) - एक आईलाइन -8859-1 एन्कोडेड फाइल को \r
-लाइन एंडिंग के साथ बचाएगा ।
चूंकि किसी और ने विशेष रूप से इसका उल्लेख नहीं किया (क्या वे जानते / याद रखने के लिए बहुत छोटे हैं?) - मुझे \r\n
टाइपराइटर और इसी तरह के उपकरणों के लिए उत्पन्न होने का संदेह है।
जब आप मल्टी-लाइन-सक्षम टाइपराइटर का उपयोग करते हुए एक नई लाइन चाहते थे, तो इसके लिए दो शारीरिक क्रियाएं करनी थीं: गाड़ी को पृष्ठ के आरंभ में (बाएं, यूएस में) वापस स्लाइड करें और एक पायदान तक कागज को खिलाएं ।
लाइन प्रिंटर के दिनों में वापस बोल्ड टेक्स्ट करने का एकमात्र तरीका है, उदाहरण के लिए, एक नई लाइन के बिना एक गाड़ी वापसी करना था और पुराने लोगों पर समान वर्णों को प्रिंट करना था, इस प्रकार अधिक स्याही जोड़ना, इस प्रकार यह गहरा (बोल्ड) दिखाई देता है । जब मैकेनिकल "न्यूलाइन" फ़ंक्शन एक टाइपराइटर में विफल हो गया था, तो यह कष्टप्रद परिणाम था: यदि आप ध्यान नहीं दे रहे थे, तो आप पाठ की पिछली पंक्ति पर टाइप कर सकते हैं।
अलग-अलग ऑपरेटिंग सिस्टम के लिए दो अलग-अलग वर्ण। इसके अलावा, यह उस डेटा पर एक भूमिका निभाता है TCP/IP
जिस पर इसके उपयोग की आवश्यकता होती है\r\n
।
\n
यूनिक्स
\r
मैक
\r\n
विंडोज और डॉस।
पूरा करना,
एक शेल (बैश) स्क्रिप्ट में, आप \r
कर्सर को लाइन पर, और निश्चित रूप \n
से एक नई लाइन पर कर्सर डालने के लिए उपयोग कर सकते हैं ।
उदाहरण के लिए, कोशिश करें:
echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
AA--AA
AA--AABB
BB--AABB
लेकिन -en
मापदंडों के रूप में उपयोग करने के लिए मत भूलना ।
विंडोज़ में, \ n अगली पंक्ति की शुरुआत में चलती है। अगली पंक्ति में जाने के बिना, वर्तमान पंक्ति की शुरुआत में \ r चलता है। मैंने अपने स्वयं के कंसोल एप्लिकेशन में \ r का उपयोग किया है जहां मैं कुछ कोड का परीक्षण कर रहा हूं और मैं अपनी स्क्रीन को स्क्रॉल करना पाठ नहीं देखना चाहता हूं, इसलिए कुछ पाठ मुद्रित करने के बाद उपयोग के बजाय, कहने के लिए, फ्रेम दर () एफपीएस), मैं प्रिंटफ ("% - 10d \ r", एफपीएस); यह कर्सर को अगली पंक्ति में जाने के बिना लाइन की शुरुआत में लौटा देगा और मुझे स्क्रीन पर अन्य जानकारी रखने की अनुमति देगा जो कि बंद नहीं होती है जबकि फ़्रैमरेट एक ही लाइन पर लगातार अपडेट करता है (% -10 बनाता है कुछ आउटपुट कम से कम 10 वर्ण के होते हैं, इसलिए इसे छोड़ दिया जाता है ताकि यह रिक्त स्थान द्वारा गद्देदार हो, उस लाइन के लिए किसी भी पुराने मान को अधिलेखित कर सके)। यह इस तरह से सामान के लिए काफी उपयोगी है,
थोड़ा इतिहास
/ आर का अर्थ "वापसी" या "कैरिज रिटर्न" है जो यह मानता है कि यह टाइपराइटर का इतिहास है। एक गाड़ी वापसी ने आपकी गाड़ी को दाईं ओर ले जाया ताकि आप लाइन के शुरू में टाइप कर रहे थे।
/ N का अर्थ "नई लाइन" है, फिर से, टाइपराइटर दिनों से आप एक नई लाइन पर चले गए। हालाँकि, इसके प्रारंभ में ऐसा नहीं है, यही वजह है कि कुछ OSes ने a / n न्यूलाइन के बाद a / r रिटर्न दोनों की आवश्यकता को अपनाया, जैसा कि एक टाइपराइटर ने किया था। "दर्ज करें" के बजाय "कैरिज रिटर्न" से "रिटर्न", जो परिचित था।
बस भ्रम में जोड़ने के लिए, मैं एक ब्राउज़र में एक HTML पृष्ठ में एक TextArea तत्व का उपयोग करके एक साधारण पाठ संपादक पर काम कर रहा हूं। सीआर / एलएफ के संबंध में अनुकूलता की आशंका के मद्देनजर, मैंने प्लेटफ़ॉर्म की जांच करने के लिए कोड लिखा था, और प्लेटफ़ॉर्म पर जो भी नई लाइन कन्वेंशन लागू थी, उसका उपयोग करने के लिए।
हालाँकि, मैंने कुछ दिलचस्प की खोज की, जब TextArea में निहित वास्तविक पात्रों की जाँच , एक छोटे जावास्क्रिप्ट फ़ंक्शन के माध्यम से जो वर्णों के अनुरूप हेक्स डेटा उत्पन्न करता है।
परीक्षण के लिए, मैंने निम्नलिखित पाठ में टाइप किया:
नमस्कार, विश्व [दर्ज करें]
अलविदा, क्रूर दुनिया [दर्ज करें]
जब मैंने पाठ डेटा की जांच की, तो मेरे द्वारा प्राप्त बाइट अनुक्रम यह था:
48 65 6 सी 6 सी 6 एफ 2 सी 20 57 6 एफ 72 6 सी 64 0 ए 47 6 एफ 6 एफ 64 62 79 65 2 सी 20 43 72 75 65 6 सी 20 57 6 एफ 72 6 सी 64 0 ए
अब, ज्यादातर लोग इसे देख रहे हैं, और 0a लेकिन कोई 0d बाइट्स नहीं देख रहे हैं, यह सोचेंगे कि यह आउटपुट एक यूनिक्स / लिनक्स प्लेटफॉर्म पर प्राप्त किया गया था। लेकिन, यहाँ रगड़ना है: यह क्रम मैंने विंडोज 7 64-बिट पर Google क्रोम में प्राप्त किया।
इसलिए, यदि आप एक TextArea एलिमेंट का उपयोग कर रहे हैं और टेक्स्ट की जांच कर रहे हैं, तो जैसा मैंने ऊपर किया है, वैसे ही यह सुनिश्चित करने के लिए कि आपके TextArea से कौन से वास्तविक कैरेक्टर बाइट्स लौटे हैं, आउटपुट चेक करें। मैंने अभी तक यह देखा है कि क्या यह अन्य प्लेटफार्मों या अन्य ब्राउज़रों पर भिन्न है, लेकिन यह ध्यान में रखने योग्य है कि क्या आप जावास्क्रिप्ट के माध्यम से टेक्स्ट प्रोसेसिंग कर रहे हैं, और आपको उस टेक्स्ट प्रोसेसिंग प्लेटफॉर्म को स्वतंत्र बनाने की आवश्यकता है।
उपरोक्त पदों में शामिल कन्वेंशन कंसोल आउटपुट पर लागू होते हैं , लेकिन HTML तत्व, ऐसा प्रतीत होता है, UNIX / Linux सम्मेलन का पालन करता है। जब तक कोई अलग मंच / ब्राउज़र पर अन्यथा पता नहीं चलता।
#include <stdio.h>
void main()
{
int countch=0;
int countwd=1;
printf("Enter your sentence in lowercase: ");
char ch='a';
while(ch!='\r')
{
ch=getche();
if(ch==' ')
countwd++;
else
countch++;
}
printf("\n Words = ",countwd);
printf("Characters = ",countch-1);
getch();
}
इस उदाहरण को लेने की कोशिश करें \ n के स्थान पर \ n डालने से काम नहीं चलेगा और यह अनुमान लगाने की कोशिश करें कि क्यों?
Return
और Enter
। यहां तक कि मेरा आधुनिक वायरलेस कीबोर्ड अभी भी पुरानी Return
कुंजी पर डाउन-एंड-बैक तीर दिखाता है (जिसे अब "एंटर" शीर्षक दिया गया है Enter
, जो संख्यात्मक कीपैड की कुंजी के अनुरूप है , जो तीर नहीं दिखाता है)
\ N (newline) और \ r (गाड़ी वापसी) के बीच क्या अंतर है?
विशेष रूप से, क्या
\n
और के बीच कोई व्यावहारिक अंतर हैं\r
? क्या ऐसे स्थान हैं जहां एक का उपयोग दूसरे के बजाय किया जाना चाहिए?
मैं \n
न्यूलाइन के लिए संबंधित एस्केप सीक्वेंस के साथ एक लघु प्रयोग करना चाहूंगा और \r
कैरिज के लिए वापसी के लिए यह स्पष्ट करूंगा कि इसके लिए अलग अंतर कहां है।
मुझे पता है, कि यह सवाल भाषा-स्वतंत्र के रूप में पूछा गया था। बहरहाल, प्रयोग को पूरा करने के लिए हमें कम से कम एक भाषा की आवश्यकता है। मेरे मामले में, मैंने C ++ को चुना है, लेकिन यह प्रयोग आम तौर पर किसी भी प्रोग्रामिंग भाषा में लागू होगा।
कार्यक्रम बस सांत्वना में एक वाक्य को मुद्रित करने के लिए पुनरावृति करता है, एक लूप पुनरावृत्ति द्वारा किया जाता है।
नया कार्यक्रम:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \n"; // Notice `\n` at the end.
}
return 0;
}
आउटपुट:
1.Walkthrough of the for-loop
2.Walkthrough of the for-loop
3.Walkthrough of the for-loop
4.Walkthrough of the for-loop
5.Walkthrough of the for-loop
6.Walkthrough of the for-loop
7.Walkthrough of the for-loop
ध्यान दें, कि यह परिणाम किसी भी सिस्टम पर प्रदान नहीं किया जाएगा , आप इस C ++ कोड को निष्पादित कर रहे हैं। लेकिन यह सबसे आधुनिक प्रणालियों के लिए काम करेगा। ज़्यादा डिटेल्स के लिए नीचे पढ़ें।
अब, एक ही कार्यक्रम, लेकिन अंतर के साथ, इसे प्रिंट अनुक्रम के अंत में \n
बदल दिया जाता है \r
।
गाड़ी वापसी कार्यक्रम:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \r"; // Notice `\r` at the end.
}
return 0;
}
आउटपुट:
7.Walkthrough of the for-loop
ध्यान दिया कि अंतर कहां है? अंतर बस के रूप में है, जब आप कैरिज रिटर्न एस्केप सीक्वेंस का उपयोग करते हैं\r
प्रत्येक प्रिंट अनुक्रम के अंत में , तो इस अनुक्रम का अगला पुनरावृत्ति निम्नलिखित टेक्स्ट लाइन में नहीं मिलता है - प्रत्येक प्रिंट अनुक्रम के अंत में, कर्सर नहीं हुआ अगली पंक्ति के * आरंभ में कूद गया।
इसके बजाय, कर्सर लाइन की शुरुआत में वापस कूद गया, जिस पर वह उपयोग करने से पहले, के अंत में रहा है \r
चरित्र । - परिणाम यह है कि प्रिंट अनुक्रम के प्रत्येक निम्नलिखित पुनरावृत्ति पिछले एक की जगह ले रहा है।
* नोट: \n
जरूरी नहीं कि निम्नलिखित टेक्स्ट लाइन की शुरुआत में कूदें। कुछ पर, सामान्य रूप से अधिक पुराने, ऑपरेशन सिस्टम में \n
न्यूलाइन वर्ण का परिणाम हो सकता है, कि यह केवल शुरुआत में ही नहीं, बल्कि निम्नलिखित पंक्ति में कहीं भी कूदता है। इसीलिए, वे \r \n
अगली पाठ पंक्ति के आरंभ में प्राप्त करने के लिए उपयोग करने के लिए भाग लेते हैं।
इस प्रयोग ने हमें प्रिंट अनुक्रम के पुनरावृत्ति के उत्पादन के संदर्भ में न्यूलाइन और कैरिज रिटर्न के बीच का अंतर दिखाया ।
इनपुट के बारे में चर्चा करते समय एक कार्यक्रम में , तो कुछ टर्मिनलों / कंसोलों में बेहतर पोर्टेबिलिटी, संगतता और अखंडता के लिए एक गाड़ी वापसी को नई रूप में परिवर्तित किया जा सकता है।
लेकिन अगर आपके पास एक को दूसरे के लिए चुनने का विकल्प है या केवल एक विशिष्ट रूप से उपयोग करने की इच्छा या आवश्यकता है, तो आपको हमेशा एक के साथ काम करना चाहिए, जो इसके उद्देश्य के लिए फिट बैठता है और सख्ती से अंतर करता है।