क्या टेक्स्ट फ़ाइल में लाइनों की संख्या प्रोग्रामेटिक रूप से निर्धारित करने का कोई आसान तरीका है?टेक्स्ट फ़ाइल के भीतर लाइनों की संख्या निर्धारित करें
उत्तर
गंभीरता से विलम्बित संपादित करें: यदि आप .NET 4.0 या उपयोग कर रहे हैं बाद में
File
वर्ग एक नया ReadLines
विधि है जो lazily लालच से उन सब को ReadAllLines
की तरह एक सरणी में पढ़ने के बजाय लाइनों विश्लेषण करता है। तो अब आप दोनों क्षमता और साथ संक्षिप्तता हो सकता है:
var lineCount = File.ReadLines(@"C:\file.txt").Count();
मूल उत्तर
आप कर रहे हैं भी दक्षता की परवाह नहीं, तो आप बस लिख सकते हैं:
var lineCount = File.ReadAllLines(@"C:\file.txt").Length;
एक और अधिक कुशल विधि के लिए आप कर सकते हैं:
var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
while (reader.ReadLine() != null)
{
lineCount++;
}
}
संपादित करें: दक्षता
कारण के बारे में सवाल के जवाब में मैंने कहा कि दूसरा अधिक कुशल स्मृति के उपयोग के बारे में किया गया था, जरूरी गति नहीं। पहला फ़ाइल फ़ाइल की संपूर्ण सामग्री को सरणी में लोड करता है जिसका अर्थ है कि इसे फ़ाइल के आकार के रूप में कम से कम स्मृति आवंटित करना होगा। दूसरा एक समय में केवल एक पंक्ति को लूप्स करता है, इसलिए इसे एक समय में एक से अधिक लाइन की मेमोरी आवंटित नहीं करना पड़ता है। यह छोटी फ़ाइलों के लिए महत्वपूर्ण नहीं है, लेकिन बड़ी फ़ाइलों के लिए यह एक मुद्दा हो सकता है (यदि आप 32-बिट सिस्टम पर 4 जीबी फ़ाइल में लाइनों की संख्या को आजमाते हैं और पाते हैं, उदाहरण के लिए, जहां बस पर्याप्त नहीं है उपयोगकर्ता-मोड पता स्थान इस सरणी को आवंटित करने के लिए)।
गति के मामले में मैं इसमें बहुत कुछ होने की अपेक्षा नहीं करता। यह संभव है कि ReadAllines के कुछ आंतरिक अनुकूलन हैं, लेकिन दूसरी तरफ इसे स्मृति का एक बड़ा हिस्सा आवंटित करना पड़ सकता है। मुझे लगता है कि छोटी फ़ाइलों के लिए ReadAllLines तेजी से हो सकता है, लेकिन बड़ी फ़ाइलों के लिए काफी धीमी है; हालांकि यह बताने का एकमात्र तरीका स्टॉपवॉच या कोड प्रोफाइलर के साथ मापना होगा।
आप इसे तुरंत पढ़ सकते हैं, और काउंटर में वृद्धि कर सकते हैं, टेक्स्ट के साथ कुछ भी नहीं करने के लिए बस एक लूप का उपयोग करें।
सीएसवी फाइलों को संसाधित नहीं करते हैं, यह एक टिप्पणी होना चाहिए, जवाब नहीं। – IamBatman
सबसे आसान:
int lines = File.ReadAllLines("myfile").Length;
कैरिएज रिटर्न गिनती/लाइन फ़ीड। मैं यूनिकोड में विश्वास करता हूं कि वे क्रमशः 0x000D और 0x000A हैं। इस तरह आप जितना चाहें उतना कुशल या अक्षम हो सकते हैं, और यह तय कर सकते हैं कि आपको दोनों वर्णों से निपटना है या नहीं
यदि आसान हो तो आप कोड की एक रेखा का मतलब समझ सकते हैं जो समझने में आसान है लेकिन प्रति मौका अक्षम है?
string[] lines = System.IO.File.RealAllLines($filename);
int cnt = lines.Count();
शायद यह जानने का सबसे तेज़ तरीका है कि कितनी लाइनें हैं।
तुम भी (यदि आप इसे बफरिंग कर रहे हैं में के आधार पर) कर सकता है
#for large files
while (...reads into buffer){
string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);
}
वहाँ अन्य कई तरीके हैं, लेकिन इसके बाद के संस्करण में से एक हैं संभव है कि आप के साथ जाना होगा।
मैं तर्क देता हूं कि यह विधि बहुत अक्षम है; क्योंकि, आप पूरी फ़ाइल को स्मृति में पढ़ रहे हैं, और एक स्ट्रिंग सरणी में, कम नहीं। रीडलाइन का उपयोग करते समय आपको बफर की प्रतिलिपि बनाने की आवश्यकता नहीं है। @GregBeech से जवाब देखें। अपने परेड पर बारिश के लिए खेद है। –
यह कम स्मृति का प्रयोग करेंगे, लेकिन शायद ले अब
int count = 0;
string line;
TextReader reader = new StreamReader("file.txt");
while ((line = reader.ReadLine()) != null)
{
count++;
}
reader.Close();
आप "wc .exe" निष्पादन योग्य (UnixUtils के साथ आता है और स्थापना की आवश्यकता नहीं है) एक बाहरी प्रक्रिया के रूप में चलाने शुरू कर सकते हैं। यह विभिन्न लाइन गिनती विधियों का समर्थन करता है (जैसे यूनिक्स बनाम मैक बनाम विंडोज़)।
कोई भी तरीका नहीं है कि यह उपयोगी होने के लिए पर्याप्त तेज़ होगा। एक्जिक्यूटिव को कॉल करने का ओवरहेड एक दोगुना होगा (स्पष्ट असाधारण स्पष्ट है) एक एकल वृद्धि लूप के रूप में। – Krythic
try {
string path = args[0];
FileStream fh = new FileStream(path, FileMode.Open, FileAccess.Read);
int i;
string s = "";
while ((i = fh.ReadByte()) != -1)
s = s + (char)i;
//its for reading number of paragraphs
int count = 0;
for (int j = 0; j < s.Length - 1; j++) {
if (s.Substring(j, 1) == "\n")
count++;
}
Console.WriteLine("The total searches were :" + count);
fh.Close();
} catch(Exception ex) {
Console.WriteLine(ex.Message);
}
एक व्यवहार्य विकल्प है, और एक है कि मैं व्यक्तिगत रूप से इस्तेमाल किया है, फ़ाइल की पहली पंक्ति के लिए अपने स्वयं के हैडर को जोड़ने के लिए किया जाएगा। मैंने यह अपने गेम के लिए एक कस्टम मॉडल प्रारूप के लिए किया था। असल में, मेरे पास एक उपकरण है जो मेरी .obj फ़ाइलों को अनुकूलित करता है, जिस बकवास की आवश्यकता नहीं है, उससे छुटकारा पाता है, उन्हें बेहतर लेआउट में परिवर्तित करता है, और उसके बाद लाइनों, चेहरे, मानक, शिखर, और बनावट यूवी की कुल संख्या लिखता है पहली पंक्ति। मॉडल लोड होने पर उस डेटा को विभिन्न सरणी बफर द्वारा उपयोग किया जाता है।
यह भी उपयोगी है क्योंकि आपको केवल एक बार लोड करने के लिए फ़ाइल को लूप करने की आवश्यकता है, बजाय लाइनों की गिनती करने के बजाय, और फिर आपके बनाए गए बफर में डेटा पढ़ने के लिए।
- 1. टेक्स्ट फ़ाइल में लाइनों की संख्या गिनती
- 2. Node.js: फ़ाइल में लाइनों की संख्या की गणना करें
- 3. फ़ाइल में लाइनों की संख्या गिनती - स्कैला
- 4. QTextEdit के लिए लाइनों की संख्या कैसे सेट करें?
- 5. SplFileObject के साथ लाइनों की संख्या कैसे प्राप्त करें?
- 6. पीडीएफ फ़ाइल में पृष्ठों की संख्या निर्धारित करें
- 7. पीडीएफ फ़ाइल में पृष्ठों की संख्या निर्धारित करें
- 8. टेक्स्ट फ़ाइल की एन्कोडिंग तालिका को निर्धारित करने के लिए
- 9. संस्करण संख्या को टेक्स्ट फ़ाइल
- 10. फ़ाइल की लाइनों पर इटरेटिंग
- 11. विशिष्ट टेक्स्ट लाइनों को निकालें?
- 12. लाइनों की UITextView संख्या को कैसे खोजें
- 13. .net टेक्स्टबॉक्स में लाइनों की सीमा संख्या
- 14. इसी तरह की बिट्स की संख्या कैसे निर्धारित करें?
- 15. एकाधिक लाइनों के साथ लेबल टेक्स्ट संरेखण
- 16. निर्धारित करें कि टेक्स्ट बॉक्स
- 17. यूनिक्स में एक टेक्स्ट फ़ाइल से लाइनों को जोड़ना?
- 18. टेक्स्ट की लाइनों के बीच अंतर को हटाएं
- 19. टेक्स्ट फ़ाइल की बाइनरी खोज कैसे करें
- 20. डिवाइस पर सिम कार्ड की संख्या कैसे निर्धारित करें?
- 21. बटन टेक्स्ट एकाधिक लाइनों के साथ नहीं
- 22. विम: दृश्य क्षेत्र के भीतर खाली लाइनों को हटाएं
- 23. php फ़ाइलों में जावास्क्रिप्ट की लाइनों की संख्या की गणना कैसे करें?
- 24. समय के साथ कोड की बदली हुई लाइनों की गणना
- 25. गैर निर्धारित कॉलम संख्या
- 26. टेक्स्ट फ़ाइल की प्रत्येक पंक्ति में वर्णों की संख्या को मुद्रित करने के लिए
- 27. फ़ाइल में कुछ वाक्यांशों की रेखा संख्या प्राप्त करें पायथन
- 28. ओकैमल में टेक्स्ट फ़ाइल से लाइनों में मैं कैसे पढ़ूं?
- 29. फ़ाइल प्रकार कैसे निर्धारित करें?
- 30. matplotlib - रेखा संग्रह/लाइनों की बड़ी संख्या का नियंत्रण कैप्स्टाइल
दूसरी विधि पहले की तुलना में कम प्रदर्शनकारी क्यों है? यह कोड से स्पष्ट नहीं है। – Sklivvz
मेरा आंत महसूस होता है कि पहला तेज हो सकता है, लेकिन यह अनुमान है कि – johnc
छोटा नोट: क्योंकि स्ट्रिंग एक संदर्भ प्रकार है, सरणी सूचकांक के आकार x के आकार का आकार होगा, लेकिन आप सही हैं कि इसे अभी भी पाठ को प्रत्येक स्ट्रिंग ऑब्जेक्ट के रूप में स्टोर करने की आवश्यकता है। –