c# - कंसोल क्यों करता है। WRITELine() फ़ंक्शन किसी स्ट्रिंग के भीतर कुछ अक्षर याद करते हैं?




string console (5)

मेरे पास स्ट्रिंग है, जिसे घोषित किया गया है:

 string text = "THIS IS LINE ONE "+(Char)(13)+" this is line 2";

और फिर भी, जब मैं Console.WriteLine(text); लिखता हूं। लिखे Console.WriteLine(text); ,

उत्पादन है:

this is line 2E

यह व्यवहार क्यों हो रहा है? या ऐसा इसलिए है क्योंकि मैं बेवकूफ़ हूं और कुछ स्पष्ट हूं?

यह प्रिंट क्यों नहीं करता है:

THIS IS LINE ONE [CR] //where the CR is a non printed character 
this is line 2

संपादित करें

कृपया ध्यान दें: यह एक 'मैं कैरिज रिटर्न कैसे जोड़ूं' सवाल नहीं करता।


यह कैसे कंसोल पर मानक आउटपुट व्यवहार करता है।

  • "\n" ( (Char)10 ) कैरेट को अगली पंक्ति की शुरुआत में स्थानांतरित कर देगा
  • "\r" ( (Char)13 ) कैरेट को मौजूदा रेखा की शुरुआत में ले जाएंगे

जैसे, परिणाम इस प्रकार पहली पंक्ति को दूसरी पंक्ति से लिखा गया है, केवल अतिरिक्त वर्ण छोड़कर कि दूसरी पंक्ति अधिलेखित नहीं हो सकती।

चूंकि आपने स्पष्ट किया है कि स्ट्रिंग / अक्षरों को उस व्यवहार को प्राप्त करने के लिए होना चाहिए, जब यह पाठ अंततः उस स्थान पर भेजा जाता है जिसे आप वास्तव में भेजना चाहते हैं, एक डॉट मैट्रिक्स प्रिंटर, तो आपको इसके साथ परीक्षण करना होगा खुद को प्रिंटर

उपरोक्त व्यवहार मानक कंसोल के लिए स्थानीयकृत है। यदि आप एक ही अक्षर को "मानक आउटपुट" में आउटपुट करते हैं, लेकिन इसे प्रिंटर पर रीडायरेक्ट किया है, तो यह प्रिंटर की परिभाषा है कि इन अक्षरों से निपटने के लिए कैसे महत्वपूर्ण है, और यह मानक कंसोल से अलग हो सकता है।

जैसे, आप मानक कंसोल में जो व्यवहार देखते हैं वह है, मानक कंसोल का व्यवहार। आपको यह देखने के लिए वास्तव में प्रिंटर के साथ परीक्षण करना होगा कि यह कैसे व्यवहार करता है।


(Char)13 एक गाड़ी वापसी है , जबकि (Char)10 एक लाइन फ़ीड है। जैसा कि अन्य लोगों ने कहा है, इसका मतलब यह है कि (चर) 13 आप जिस लाइन पर हैं, उसकी शुरुआत में वापस आएगा, ताकि जब तक आपने (कम) पंक्ति 2 लिखा हो, यह स्ट्रिंग के पहले भाग पर लिखा जाएगा - इस प्रकार शेष "ई"

यदि आप इसे छोटी दूसरी स्ट्रिंग के साथ आज़माते हैं, तो आप यह देख सकते हैं:

string text = "THIS IS LINE ONE " + (Char)13 +"test";
Console.WriteLine(text);

आउटपुट देता है:

"test IS LINE ONE"

इसलिए, आपकी समस्या को हल करने के लिए, सही कोड होगा:

string text = "THIS IS LINE ONE " + (Char)10 +"test";
Console.WriteLine(text);

जो उत्पादन करता है:

THIS IS LINE ONE
this is line 2

संपादित करें:

मूलतः, चूंकि आपने कहा था कि आपके प्रिंटर के लिए यह एक (चर) 13 होना आवश्यक है, मैंने एक समान प्रभाव प्राप्त करने के लिए दोनों (Char)10 + (Char)13 (या इसके विपरीत) की कोशिश करने का सुझाव दिया हालांकि, पीटर एम के अत्यधिक उपयोगी टिप्पणियों के लिए धन्यवाद, ऐसा प्रतीत होता है कि आपके द्वारा उपयोग किए जा रहे प्रिंटर का ब्रांड वास्तव में एक (Char)10 - मैनुअल के अनुसार, (Char)10 एक लाइन फ़ीड और कैरिएस रिटर्न का उत्पादन करेगा, जो आप की आवश्यकता क्या है


उत्पादन ऐसा नहीं लगता है। आपका टर्मिनल कार्यक्रम आपको स्टैट आउट में लिखे गए बाइट्स के कुछ पात्रों को छुपाता है क्योंकि वह गाड़ी वापसी की उपस्थिति को टेक्स्ट लेआउट कमांड के रूप में व्याख्या करता है (जो कि पीछे से पीछे जाता है)। हेक्सडम्प पुष्टि कर सकता है कि आउटपुट के बाइट्स को दिखाकर आउटपुट सही है।

using System;
public class Hello1 {
  public static void Main()  {
     string text = "THIS IS LINE ONE "+(Char)(13)+" this is line 2";
     System.Console.WriteLine(text);
   }   
}

संकलित करें और चलाएं:

$ gmcs a.cs
$ ./a.exe
 this is line 2E
$ ./a.exe | hexdump -C
00000000  54 48 49 53 20 49 53 20  4c 49 4e 45 20 4f 4e 45  |THIS IS LINE ONE|
00000010  20 0d 20 74 68 69 73 20  69 73 20 6c 69 6e 65 20  | . this is line |
00000020  32 0a                                             |2.|
00000022

यदि आप यह व्यवहार चाहते हैं:

THIS IS LINE ONE [CR] //where the CR is a non printed character 
this is line 2

आपको इस कोड की आवश्यकता है:

        char a = (char)10;
        string text = "THIS IS LINE ONE" + a + "this is line 2"

        Console.WriteLine(text);

एक कैरेज़ रिटर्न ((चर) 13) एक कंट्रोल कैरेक्टर या मैकेनिज़्म है जिसका प्रयोग किसी डिवाइस की स्थिति को पाठ की एक पंक्ति की शुरुआत में रीसेट करने के लिए किया जाता है, इसके कारण आप इस व्यवहार का अनुभव करते हैं। जैसे मैंने कहा था कि आपके मामले की आवश्यकता है (चार)


"कैरिज रिटर्न, कभी-कभी कारतूस रिटर्न के रूप में जाना जाता है और अक्सर सीआर को कम किया जाता है, या रिटर्न, एक कंट्रोल कैरेक्टर या मैकेनिज्म है जिसका इस्तेमाल डिवाइस की स्थिति को पाठ की एक पंक्ति की शुरुआत में रीसेट करता है।" (स्रोत)

CR कभी भी एक पंक्ति में परिवर्तन नहीं करता है, वास्तव में यह "THIS IS LINE ONE " की शुरुआत करने के लिए सभी रास्ते देता "THIS IS LINE ONE " और छापती है " this is line 2" इसके ऊपर, इसलिए आप वाक्य के अंत में अतिरिक्त E क्यों देखते हैं, चूंकि लाइन एक एक चरित्र का लंबा है यह स्पष्ट हो जाता है यदि आप दो तारों (पहली स्ट्रिंग का अंतिम चरित्र और दूसरी स्ट्रिंग का पहला अक्षर) से दो स्थान हटाते हैं, जहां आउटपुट तब "this is line 2NE" हो जाता "this is line 2NE"

एक ही स्रोत से:

"कर्सर की स्थिति को एक ही पंक्ति पर पहले स्थान पर ले जाने के लिए, यह एक प्रिंटर या अन्य आउटपुट सिस्टम को एक डिस्प्ले का आदेश देता है।"

आप जो देख रहे हैं वह CR नहीं है, लेकिन CR और LF (लाइन फीड) का संयोजन: CRLF







console.writeline