2011-01-28 13 views
25

मैंने देखा है कि कई डेवलपर्स नई लाइनों द्वारा स्ट्रिंग को विभाजित करने के लिए विभिन्न विधियों का उपयोग करते हैं, लेकिन मैं उलझन में हूं जो सही है: \r\n या \n केवल?एक नई लाइन = n या r n है?

+3

मैंने कभी भी \ \ \ r' नहीं देखा है। आमतौर पर यह \ r \ n' होता है यदि वे दो का उपयोग कर रहे हैं। – icktoofay

+0

यह वास्तव में आपके द्वारा प्रसंस्करण की जा रही फ़ाइल/स्ट्रिंग के प्रारूप पर निर्भर करता है। – MrGlass

+2

यदि आप मूल सिस्टम ईओएल चरित्र को अपने तारों में एम्बेड करना चाहते हैं तो एक PHP_EOL निरंतर उपलब्ध है। यदि आप अन्य सिस्टम से आए पाठ से निपट रहे हैं, तो बहुत मदद नहीं करता है। –

उत्तर

55

\n यूनिक्स सिस्टम (लिनक्स और ओएसएक्स समेत) के लिए उपयोग किया जाता है।

\r\n मुख्य रूप से विंडोज पर उपयोग किया जाता है।

\r वास्तव में पुराने मैक पर उपयोग किया जाता है।

+0

\ r कभी-कभी वर्तमान मैक पर भी प्रयोग किया जाता है। हालांकि, अधिकांश सादे पाठ संपादकों ने यूनिक्स शैली में स्विच किया है। – ughoavgfhw

+0

काफी सही। उन लोगों के लिए अधिक विशिष्ट होने के लिए जो "नहीं जानते हैं," अधिकांश यूनिक्स सिस्टम "जो \ n' का उपयोग करते हैं, उनमें मैक ओएस एक्स – Wiseguy

+3

शामिल है बस स्पष्ट होना: वास्तव में पुराने मैक का मतलब ओएस 9 के लिए कोड किए गए प्रोग्राम हैं, जिन्हें मृत घोषित किया गया था 2002. – Yuji

3

आप PHP में प्रोग्रामिंग रहे हैं, तो यह \n द्वारा लाइनों विभाजित करने के लिए उपयोगी है और उसके बाद trim() प्रत्येक पंक्ति (आप सफेद स्थान के बारे में परवाह नहीं है प्रदान की) यदि आप एक "क्लीन" लाइन परवाह किए बिना देने के लिए।

foreach($line in explode("\n", $data)) 
{ 
    $line = trim($line); 
    ... 
} 
22

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

  • \r\n केवल Windows नोटपैड, डॉस कमांड लाइन, पर प्रयोग किया जाता है Windows API का सबसे और कुछ (पुराने) विंडोज ऐप्स में।
  • \n अन्य सभी प्रणालियों, अनुप्रयोगों और इंटरनेट के लिए उपयोग किया जाता है।

आप देखेंगे कि मैं \n समूह में सबसे विंडोज क्षुधा थोड़ा विवादास्पद हो सकता है लेकिन इससे पहले कि आप इस कथन से असहमत हैं, एक UNIX स्वरूपित पाठ फ़ाइल हड़पने और 10 वेब के अनुकूल Windows में यह प्रयास करें जो रख दिया है आपकी पसंद के अनुप्रयोग (जो उपरोक्त मेरे अपवादों में सूचीबद्ध नहीं हैं)। उनमें से किस प्रतिशत ने इसे ठीक से संभाला? आप पाएंगे कि वे (व्यावहारिक रूप से) सभी लाइन अंतराल के ऑटो डिटेक्शन को लागू करते हैं या बस \n का उपयोग करते हैं, जबकि विंडोज \r\n का उपयोग कर सकते हैं, इंटरनेट \n का उपयोग करता है। इसलिए, यदि आप अपने आउटपुट को इंटरनेट के अनुकूल बनाना चाहते हैं तो अनुप्रयोगों के लिए \n अकेले उपयोग करने के लिए यह सर्वोत्तम अभ्यास है।

PHP PHP_EOL नामक एक न्यूलाइन चरित्र को भी परिभाषित करता है। यह स्थिरता मशीन के लिए ओएस विशिष्ट न्यूलाइन स्ट्रिंग पर सेट है (विंडोज़ के लिए \r\n और अन्य सभी चीज़ों के लिए \n)। यह निरंतर वेबपृष्ठों के लिए बहुत उपयोगी नहीं है और HTML आउटपुट के लिए या फ़ाइलों को अधिकतर टेक्स्ट लिखने से बचा जाना चाहिए। जब हम PHP अनुप्रयोगों से कमांड लाइन आउटपुट में जाते हैं तो यह बहुत उपयोगी हो जाता है क्योंकि यह आपके एप्लिकेशन को सभी समर्थित ओएस में लगातार तरीके से टर्मिनल विंडो में आउटपुट करने की अनुमति देगा।

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

भी लंबे समय तक स्पष्टीकरण:

एक आवेदन का उपयोग करने के लिए जो भी लाइन अंत यह डिफ़ॉल्ट ओएस लाइन शैली समाप्त होने की परवाह किए बिना पसंद करती है चुन सकते हैं। अगर मैं अपने टेक्स्ट एडिटर को एक नई लाइन मुद्रित करना चाहता हूं, तो हर बार यह उस अवधि से मुकाबला करता है जो \n का उपयोग करने के लिए एक नई लाइन का प्रतिनिधित्व करने के लिए कठिन नहीं है क्योंकि मैं टेक्स्ट को व्याख्या कर रहा हूं क्योंकि मैं इसे वैसे भी प्रदर्शित करता हूं। IOW, मैं प्रत्येक चरित्र की चौड़ाई को मापने के साथ चारों ओर झुका रहा हूं, इसलिए यह जानता है कि अगला कहां प्रदर्शित करना है, इसलिए यह बयान जोड़ना बहुत आसान है कि यदि वर्तमान चार अवधि है तो एक नई कार्यवाही करें (या यदि यह है एक \n फिर एक अवधि प्रदर्शित करें)।

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

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

+1

"आपको हमेशा टर्मिनल आउटपुट होने तक \ n' 'का उपयोग करना चाहिए" - मुझे संदेह था, लेकिन तर्क पर यह स्पष्टता सिर्फ वही है जो मैं ढूंढ रहा था। – sfarbota

+0

आप कथन के साथ रास्ते से बाहर हैं "\ n अन्य सभी प्रणालियों, अनुप्रयोगों और इंटरनेट के लिए प्रयोग किया जाता है।" कई इंटरनेट प्रोटोकॉल के लिए \ r \ n लाइन समाप्ति एचटीपी हेडर को \ r \ n के साथ समाप्त करने की आवश्यकता होती है और हेडर और संदेश को \ r \ n – Raatje

+0

से अलग किया जाना चाहिए HTTP (7230), SMTP (RFC5321), पीओपी 3 (आरएफसी 1 9 3 9) और ईमेल (आरएफसी 2822) जो राज्य \ r \ n लाइन एंडिंग के लिए जरूरी है – Raatje

संबंधित मुद्दे