स्रोत फ़ाइल के अंत में खाली लाइन रखने की अनुशंसा क्यों की जाती है?


232

कुछ कोड स्टाइल टूल इसकी सलाह देते हैं और मुझे याद है कि कुछ यूनिक्स कमांड लाइन टूल को खाली लाइन गुम होने के बारे में चेतावनी देते हुए देखते हैं।

एक अतिरिक्त खाली लाइन होने का क्या कारण है?


7
यदि फ़ाइल किसी नई पंक्ति के साथ समाप्त नहीं होती है तो कुछ उपकरण काम करने में विफल रहते हैं। यह अंत में एक खाली लाइन होने से अलग है (जो कि 2 नए अंक होंगे)।
विलियम पर्ससेल

2
क्या आपका मतलब खाली लाइन ( \n\n) या नई लाइन से है \n?
सिरो सेंटिल्ली 郝海东 i i i 法轮功 ''

13
catशेल पर फ़ाइल और आपको पता चल जाएगा कि क्यों। यदि आपकी फ़ाइल मेरे शेल के प्रॉम्प्ट को किसी अन्य स्थान पर दिखाई देती है, तो इसके बजाय यह होना चाहिए (लाइन की शुरुआत में) मैं शायद आपसे नफरत करूंगा। ;)
ThiefMaster

2
इस पुराने सवाल पर आया और बस विश्वास नहीं कर सकता कि हर एक जवाब अन्य औजारों और प्रणालियों की विफलताओं और कमियों को सही ठहराने की कोशिश करता है, यह कहकर कि आधुनिक कोडर्स को एक ऐसे चरित्र को जोड़ना चाहिए जिसका कोड में कोई मूल्य नहीं है। एक पिंजरे में 5 बंदरों के बारे में बात करो! :
एमोस कारपेंटर

1
बेहतर (अधिक सामान्य) उत्तर पाठ फ़ाइलों को सामान्य रूप से :: stackoverflow.com/questions/729692/…
रूबेन बार्टेलिंक

जवाबों:


188

कई पुराने उपकरण दुर्व्यवहार करते हैं यदि एक पाठ फ़ाइल में डेटा की अंतिम पंक्ति को एक नई लाइन या गाड़ी वापसी / दूसरी लाइन संयोजन के साथ समाप्त नहीं किया जाता है। वे उस रेखा को अनदेखा कर देते हैं क्योंकि इसे ^ Z (eof) के बजाय समाप्त किया जाता है।


1
जवाब के लिए धन्यवाद! लोकप्रिय साधनों का कोई भी उदाहरण जो इस व्यवहार को प्रदर्शित कर सकता है?
निक मेरिल

8
@NickM लगभग सभी POSIX / Unix कमांड-लाइन टूल जो टेक्स्ट इनपुट लेते हैं या टेक्स्ट फाइल पढ़ते हैं \n, फाइल के अंत में एक लाइन एंडिंग ( ) मानते हैं । कई पाठ संपादक, जैसे विम और कई संकलक (विशेष रूप से C ++ और पायथन) चेतावनी जारी करेंगे। (C ++ के मामले में, मानक को स्पष्ट रूप से इसकी आवश्यकता होती है।)
ग्रेफेड

5
तो आप जो कह रहे हैं ... यह एक कार्गो पंथ है
Jaykul

फिर भी आप अंतिम पंक्ति पर पाठ कर सकते हैं, प्रश्न में एक खाली रेखा का उल्लेख है \n\n
जिनेवी

57

यदि आप एक साथ दो पाठ फ़ाइलों को संक्षिप्त करने का प्रयास करते हैं, तो आप पहले एक नए चरित्र के साथ समाप्त होने पर बहुत खुश होंगे।


38

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

फ़ाइल के अंत में एक नई लाइन होने से एक सरल जाँच होती है कि फ़ाइल को छोटा नहीं किया गया है।


221
फ़ाइल को छोटा किया जा सकता है और आप कभी भी घुटने नहीं लगाएंगे
साइमन निकर्सन

26

क्लीनर के लिए एक तर्क भी अलग किया जा सकता है यदि आप उसी तर्क के बाद फाइल में संलग्न होते हैं तो अनुगामी अल्पविराम को सूची में क्यों रखा जाता है?

लिंक किए गए संसाधन से निम्नलिखित की प्रतिलिपि बनाई गई है (और थोड़ी सी छंटनी की गई है):

बदल रहा है:

s = [
  'manny',
  'jack',
]

सेवा:

s = [
  'manny',
  'jack',
  'roger',
]

अंतर में केवल एक-पंक्ति परिवर्तन शामिल है:

  s = [
    'manny',
    'jack',
+   'roger',
  ]

यह अधिक भ्रामक मल्टी-लाइन धड़कता है जब अनुगामी अल्पविराम छोड़ा गया था:

  s = [
    'manny',
-   'jack'
+   'jack',
+   'roger'
  ]

लिंक-केवल उत्तरों को SO पर मूल्यवान नहीं माना जाता है। कृपया अनुरक्षण को बनाए रखते हुए संबंधित जानकारी को यहां कॉपी करें।
हैशरवुड जूल

17

फ़ाइल के अंत में खाली लाइन दिखाई देती है ताकि इनपुट स्ट्रीम से मानक रीडिंग पता चल जाएगा कि रीड को कब समाप्त करना है, आमतौर पर यह इंगित करने के लिए ईओएफ लौटता है कि आप अंत तक पहुंच चुके हैं। अधिकांश भाषाएं EOF मार्कर को संभाल सकती हैं। यह पुराने दिनों से उस कारण से है, डॉस के तहत, EOF मार्कर F6 कुंजी या Ctrl-Z था, * nix सिस्टम के लिए, यह Ctrl-D था।

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

पुराने उपकरण ईओएफ मार्कर के बाद एक खाली लाइन की उम्मीद कर रहे थे। आजकल, उपकरण खाली लाइन को संभाल सकते हैं और इसे अनदेखा कर सकते हैं।


6
^ D "EOF मार्कर" नहीं था। दबाने वाले ^ D ने शेल को पाइप के राइट साइड को बंद करने का कारण बनाया जिसे अग्रभूमि प्रक्रिया समूह से पढ़ रहा था, ताकि उस पाइप से एक रीड ईओएफ वापस आए। कोई "EOF मार्कर" नहीं है।
विलियम पार्सेल

@William Pursell आपने गलती से * NIX और विंडोज को कबूल कर लिया। लीगेसी विंडोज / डॉस ने एक ईओएफ मार्कर (26, 0x1 ए) का बिल्कुल इस्तेमाल किया जो आमतौर पर प्राचीन सीपी / एम (1983 के बाद किसने सीपी / एम का उपयोग किया था? अन्य "मज़ा": \r\nइसके बजाय \n, डॉस ASCIIZ और ASCII $ के मिश्रण का उपयोग कर कॉल करता है। इससे भी बदतर, बाद में विंडोज पर आमतौर पर ज्यादातर टेक्स्ट फाइलों की शुरुआत में यूनिकोड बाइट ऑर्डर मार्क (BOM) डाला जाता है। लवली "विशिष्टता"।

9

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


5

कुछ भाषाएं इनपुट लाइनों के संदर्भ में अपनी इनपुट फ़ाइल को परिभाषित करती हैं, जहां प्रत्येक इनपुट लाइन एक गाड़ी वापसी द्वारा समाप्त किए गए वर्णों की एक श्रृंखला है। अगर उनका व्याकरण इतना परिभाषित है, तो गाड़ी की अंतिम वैधता को गाड़ी वापसी द्वारा भी समाप्त किया जाना चाहिए।


3

यह एक पाठ फ़ाइल की परिभाषा के कारण है। जब आप किसी भी यूनिक्स वातावरण में एक नई पाठ फ़ाइल बनाते हैं, तो उस फ़ाइल की सामग्री नई पंक्ति वर्ण '\ n' होती है

इसके बिना, फ़ाइल को वास्तव में टेक्स्ट फ़ाइल के रूप में पहचाना नहीं जाता है। अब एक बार जब हम इस पाठ फ़ाइल में कोड जोड़ते हैं, तो इसके बारे में इस प्रारंभिक नई लाइन को हटाने के बारे में नहीं है जो एक पाठ फ़ाइल को परिभाषित करता है

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