2013-04-15 6 views
9

मैं एक पाठ फ़ाइल में वर्णों की संख्या की गणना करने के लिए इस कोड लिखा है:सी # में नई लाइन चरित्र

sr.BaseStream.Position = 0; 
sr.DiscardBufferedData(); 
int Ccount = 0; 
while (sr.Peek() != -1) 
{ 
    sr.Read(); 
    Ccount++; 
} 

लेकिन एक फ़ाइल के लिए इस कोड को लागू करने के बाद शामिल हैं:

1 
2 
3 
4 
5 
6 
7 
8 
9 
0 

Ccount = 30 ???? क्यों? मैं आभासी बॉक्स पर Windows XP का उपयोग कर रहा हूँ मेरी मैकबुक इस्तेमाल किया कार्यक्रम पर: माइक्रोसॉफ्ट विजुअल बेसिक 2010

+4

कैरेक्टर + रिटर्न + नई लाइन = प्रति पंक्ति 3 वर्ण = 3 * 10 = 30 कुल मिलाकर। –

+0

10 वर्ण + 10 कैरिज रिटर्न + 10 लाइन फ़ीड्स? '? \ r \ n' –

+0

पर्यावरण। न्यूलाइन किसी भी ओएस में न्यूलाइन कैरेक्टर से मेल खाना चाहिए। –

उत्तर

14

विंडोज़ में प्रत्येक नई लाइन में दो वर्ण \r और \n होते हैं। आपके पास 10 लाइनें हैं, प्रत्येक पंक्ति में 1 दृश्यमान वर्ण और 2 नए रेखा वर्ण हैं जो 30 वर्ण तक जोड़ते हैं।

यदि आपने मैक या यूनिक्स/लिनक्स में अपनी फ़ाइल बनाई है तो आपके पास गेटटन अलग-अलग परिणाम (20 वर्ण) होंगे। चूंकि यूनिक्स केवल \n का उपयोग करता है और मैक एक नई लाइन के लिए केवल \r का उपयोग करता है।

आप कुछ नए संपादकों (जैसे नोटपैड ++) का उपयोग कर सकते हैं ताकि आपको नए लाइन वर्ण दिखाए जा सकें, या विभिन्न मोड (डॉस/यूनिक्स/मैक) के बीच भी स्विच कर सकें।

+0

धन्यवाद श्री सिना – ammarx

13

आप एक समय में एक चरित्र पढ़ रहे हैं, और प्रत्येक पंक्ति में तीन वर्ण हैं:

  • एक अंकों
  • एक गाड़ी वापसी (\r)
  • एक नई पंक्ति (\n)

(विंडोज \r\n का उपयोग अपने न्यूलाइन अनुक्रम के रूप में करता है। तथ्य यह है कि आप मैक पर वीएम में चल रहे हैं, इससे प्रभावित नहीं होता है।)

2

नई लाइन वास्तव में 2 अलग-अलग वर्ण हैं: एलएफ सीआर (लाइन फीड और कैरिज रिटर्न)। लेकिन आप जान लेंगे कि अगर आप अपने लूप में ब्रेकपॉइंट डालते हैं। अब अतिरिक्त क्रेडिट के लिए, यूनिकोड में कितने बाइट्स हैं?

2

विंडोज आमतौर पर नई लाइन के लिए \r\n का उपयोग करता है, जो ASCII वर्ण 0x13 और 0x10 है।

सुझाएँ आपको ऐसा करने से अपने आप को यह साबित:

Console.WriteLine("0x{0:x}", sr.Read()); 
3

यह करने के लिए एक आसान तरीका नहीं है। संपूर्ण * .txt फ़ाइल को स्ट्रिंग सरणी में बनाएं और इसे मापें:

int count = 0; 

string[] Text = File.ReadAllLines(/*Path to the file here*/); 

for (int i = 0; i < Text.Count(); i++) 
{ 
     count += Text[i].Length; 
} 
संबंधित मुद्दे