সি #: মাল্টলাইন স্ট্রিংয়ের লাইনের মধ্য দিয়ে লুপিং


101

অনেক বেশি মেমরি ব্যবহার না করে একাধিক রেখার প্রতিটি লাইনের মধ্য দিয়ে লুপ করার ভাল উপায় কী (উদাহরণস্বরূপ এটি অ্যারেতে বিভক্ত না করে)?

উত্তর:


160

আমি StringReaderএবং আমার LineReaderক্লাসের সংমিশ্রণটি ব্যবহার করার পরামর্শ দিচ্ছি , যা মিস্কিটিলের অংশ, তবে এই স্ট্যাকওভারফ্লো উত্তরটিতেও পাওয়া যায় - আপনি কেবলমাত্র সেই শ্রেণিকে সহজেই নিজের ইউটিলিটি প্রকল্পে অনুলিপি করতে পারেন। আপনি এটি এর মতো ব্যবহার করবেন:

string text = @"First line
second line
third line";

foreach (string line in new LineReader(() => new StringReader(text)))
{
    Console.WriteLine(line);
}

সর্বাঙ্গে Looping স্ট্রিং ডেটার একটি শরীরের লাইন (যে কোনো ফাইল বা যাই হোক না কেন কিনা) তাই সাধারণ এটি কলিং কোড প্রয়োজন করা উচিত নয় নাল ইত্যাদি পরীক্ষা করা :) যে বলেন, আপনি যদি না একটি কাজ করতে চান ম্যানুয়াল লুপ, এটি ফর্ম যা আমি সাধারণত ফ্রেড্রিকের চেয়ে পছন্দ করি:

using (StringReader reader = new StringReader(input))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        // Do something with the line
    }
}

এইভাবে আপনাকে কেবল একবার নালিক্যের জন্য পরীক্ষা করতে হবে, এবং আপনার কোনও ডু / লুপ সম্পর্কে চিন্তা করতে হবে না (যা কোনও কারণে সর্বদা আমাকে লুপের চেয়ে পড়ার জন্য সবসময় বেশি চেষ্টা করে)।


75

আপনি StringReaderএকবারে একটি লাইন পড়তে একটি ব্যবহার করতে পারেন :

using (StringReader reader = new StringReader(input))
{
    string line = string.Empty;
    do
    {
        line = reader.ReadLine();
        if (line != null)
        {
            // do something with the line
        }

    } while (line != null);
}

4
দুর্দান্ত; +1; এটি সাহায্য করেছে; তবে আমি কেবল এটি যুক্ত করতে চাই যে আসলে "ইউজিং" ব্লকটি ব্যবহার করার প্রয়োজন নেই কারণ এই ক্ষেত্রে বন্ধ করার মতো কোনও সংস্থান নেই। ডকস.মাইক্রোসফট.কম এ স্ট্রিংরেডার নিবন্ধে মন্তব্যগুলি
আরডি

11

আমি জানি এটির উত্তর দেওয়া হয়েছে, তবে আমি নিজের উত্তরটি যুক্ত করতে চাই:

using (var reader = new StringReader(multiLineString))
{
    for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
    {
        // Do something with the line
    }
}

7

স্ট্রিংরেডার এর জন্য এমএসডিএন থেকে

    string textReaderText = "TextReader is the abstract base " +
        "class of StreamReader and StringReader, which read " +
        "characters from streams and strings, respectively.\n\n" +

        "Create an instance of TextReader to open a text file " +
        "for reading a specified range of characters, or to " +
        "create a reader based on an existing stream.\n\n" +

        "You can also use an instance of TextReader to read " +
        "text from a custom backing store using the same " +
        "APIs you would use for a string or a stream.\n\n";

    Console.WriteLine("Original text:\n\n{0}", textReaderText);

    // From textReaderText, create a continuous paragraph 
    // with two spaces between each sentence.
    string aLine, aParagraph = null;
    StringReader strReader = new StringReader(textReaderText);
    while(true)
    {
        aLine = strReader.ReadLine();
        if(aLine != null)
        {
            aParagraph = aParagraph + aLine + " ";
        }
        else
        {
            aParagraph = aParagraph + "\n";
            break;
        }
    }
    Console.WriteLine("Modified text:\n\n{0}", aParagraph);

2

এখানে একটি দ্রুত কোড স্নিপেট যা স্ট্রিংয়ে প্রথম অ-খালি লাইনটি খুঁজে পাবে:

string line1;
while (
    ((line1 = sr.ReadLine()) != null) &&
    ((line1 = line1.Trim()).Length == 0)
)
{ /* Do nothing - just trying to find first non-empty line*/ }

if(line1 == null){ /* Error - no non-empty lines in string */ }

2

.NET 4- র জন্য এই প্রাচীন প্রশ্নটি আপডেট করার জন্য এখন আরও অনেক সুস্পষ্ট উপায় রয়েছে:

var lines = File.ReadAllLines(filename);

foreach (string line in lines)
{
    Console.WriteLine(line);
}

0

স্ট্রিং.স্প্লিট পদ্ধতিটি ব্যবহার করে দেখুন:

string text = @"First line
second line
third line";

foreach (string line in text.Split('\n'))
{
    // do something
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.