Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# का उपयोग करके टेक्स्ट फाइल को लाइन दर लाइन पढ़ने के सबसे तेज़ तरीके क्या हैं?

टेक्स्ट फाइल को लाइन दर लाइन पढ़ने के कई तरीके हैं। इनमें StreamReader.ReadLine, File.ReadLines आदि शामिल हैं। आइए एक टेक्स्ट फाइल पर विचार करें जिसमें निम्न लाइन्स हैं।

विधि 1: StreamReader.ReadLine का उपयोग करना

C# StreamReader का उपयोग निर्दिष्ट एन्कोडिंग में स्ट्रीम से कैरेक्टर्स पढ़ने के लिए किया जाता है। StreamReader.ReadLine मेथड इनपुट स्ट्रीम से अगली लाइन पढ़ता है।

using System;
using System.IO;
using System.Text;

namespace DemoApplication
{
    public class Program
    {
        static void Main(string[] args)
        {
            string filePath = @"D:\Demo\Demo.txt";
            
            // using स्टेटमेंट सुनिश्चित करता है कि संसाधन सही से डिस्पोज हों
            using (var fileStream = File.OpenRead(filePath))
            using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
            {
                string line;
                while ((line = streamReader.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }
            
            Console.ReadLine();
        }
    }
}

विधि 2: File.ReadLines का उपयोग करना (मेमोरी-कुशल)

File.ReadLines() एक IEnumerable<string> लौटाता है जो लेज़ीली लाइन्स पढ़ता है - पूरी फाइल को एक बार में मेमोरी में लोड नहीं करता। बड़ी फाइलों के लिए आदर्श।

using System;
using System.IO;

namespace DemoApplication
{
    public class Program
    {
        static void Main(string[] args)
        {
            string filePath = @"D:\Demo\Demo.txt";
            
            // लेज़ी एन्यूमरेशन - एक समय में एक लाइन
            var lines = File.ReadLines(filePath);
            
            foreach (var line in lines)
            {
                Console.WriteLine(line);
            }
            
            Console.ReadLine();
        }
    }
}

विधि 3: File.ReadAllLines का उपयोग करना (पूरी फाइल मेमोरी में)

File.ReadAllLines() पूरी फाइल पढ़कर string[] लौटाता है। रैंडम एक्सेस की अनुमति देता है लेकिन पूरी फाइल मेमोरी में लोड करता है। छोटी फाइलों के लिए उपयुक्त।

using System;
using System.IO;

namespace DemoApplication
{
    public class Program
    {
        static void Main(string[] args)
        {
            string filePath = @"D:\Demo\Demo.txt";
            
            // पूरी फाइल मेमोरी में लोड होती है
            string[] lines = File.ReadAllLines(filePath);
            
            for (int i = 0; i < lines.Length; i++)
            {
                Console.WriteLine($"Line {i + 1}: {lines[i]}");
            }
            
            // रैंडम एक्सेस संभव
            Console.WriteLine($"पहली लाइन: {lines[0]}");
            Console.WriteLine($"अंतिम लाइन: {lines[lines.Length - 1]}");
            
            Console.ReadLine();
        }
    }
}

आउटपुट (सभी विधियों के लिए)

Hi All!!
Hello Everyone!!
How are you?

तुलना: कौन सी विधि कब उपयोग करें?

विधिरिटर्न टाइपमेमोरी उपयोगउपयुक्त
StreamReader.ReadLinestring (प्रति कॉल)न्यूनतम (स्ट्रीमिंग)बड़ी फाइलें, कस्टम पार्सिंग, एन्कोडिंग नियंत्रण
File.ReadLinesIEnumerable<string>न्यूनतम (लेज़ी)बड़ी फाइलें, LINQ क्वेरीज, फॉरवर्ड-ओनली रीडिंग
File.ReadAllLinesstring[]उच्च (पूरी फाइल)छोटी फाइलें, रैंडम एक्सेस, बार-बार पुनरावृत्ति

एडवांस्ड: एन्कोडिंग के साथ File.ReadLines

// विशिष्ट एन्कोडिंग के साथ (डिफ़ॉल्ट UTF-8)
var lines = File.ReadLines(filePath, Encoding.GetEncoding("windows-1252"));

// .NET 6+ में
var lines = File.ReadLines(filePath, Encoding.UTF8);

एडवांस्ड: StreamReader के साथ Async पढ़ना

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

public async Task ReadFileAsync(string filePath)
{
    using (var reader = new StreamReader(filePath, Encoding.UTF8))
    {
        string line;
        while ((line = await reader.ReadLineAsync()) != null)
        {
            Console.WriteLine(line);
            // Async प्रोसेसिंग यहां करें
        }
    }
}

एडवांस्ड: LINQ के साथ प्रोसेसिंग

using System.Linq;

// File.ReadLines के साथ LINQ (लेज़ी इवैल्यूएशन)
var longLines = File.ReadLines(filePath)
    .Where(line => line.Length > 80)
    .Select(line => line.Trim())
    .Take(100); // केवल पहली 100 लंबी लाइन्स

foreach (var line in longLines)
{
    Console.WriteLine(line);
}

// काउंट पाने के लिए (पूरी सीक्वेंस एन्यूमरेट करता है)
int totalLines = File.ReadLines(filePath).Count();

बेंचमार्क सारांश (सामान्य)

  • सबसे तेज़ कच्ची गति: File.ReadAllLines (छोटी फाइलों के लिए, अनुकूलित नेटिव कोड)
  • सबसे अच्छा मेमोरी: File.ReadLines या StreamReader (स्ट्रीमिंग)
  • सबसे लचीला: StreamReader (एन्कोडिंग, बफर साइज, Async नियंत्रण)
  • LINQ के लिए सर्वश्रेष्ठ: File.ReadLines (कंपोज़ेबल, लेज़ी)

सिफारिश: अधिकांश मामलों में File.ReadLines डिफ़ॉल्ट विकल्प होना चाहिए - यह मेमोरी-कुशल, LINQ-अनुकूल और उपयोग में सरल है।

  1. - टेक्स्ट स्टेगनोग्राफी के लोकप्रिय दृष्टिकोण क्या हैं?

    टेक्स्ट स्टेगनोग्राफी के दृष्टिकोण टेक्स्ट स्टेगनोग्राफी के विभिन्न दृष्टिकोण निम्नलिखित हैं: लाइन शिफ्ट (Line Shift) इस विधि में, गुप्त संदेश को टेक्स्ट लाइनों को कुछ हद तक लंबवत रूप से बदलकर निजी रखा जाता है। एक तय लाइन के प्रत्येक तरफ दो स्पष्ट नियंत्रण रेखाएं होती हैं जो चिह्नित लाइन के आंदोलन

  1. - स्टेगनोग्राफी की आवश्यकताएं क्या हैं?

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

  1. DES के रूपांतर क्या हैं? DES के रूपांतर क्या हैं?

    डेटा एन्क्रिप्शन स्टैंडर्ड के दो मुख्य रूपांतर निम्नलिखित हैं: डबल DES (Double DES) - डबल DES एक एन्क्रिप्शन दृष्टिकोण है जिसे समान प्लेन टेक्स्ट पर DES के दो उदाहरणों की आवश्यकता होती है। दोनों उदाहरणों में यह प्लेन टेक्स्ट को एन्क्रिप्ट करने के लिए कई कुंजियों का उपयोग करता है। डिक्रिप्शन के समय