c# - .NET এর নতুন লাইনগুলিতে একটি স্ট্রিং বিভক্ত করার সবচেয়ে সহজ উপায়?




string split (10)

Regex এছাড়াও একটি বিকল্প:

    private string[] SplitStringByLineFeed(string inpString)
    {
        string[] locResult = Regex.Split(inpString, "[\r\n]+");
        return locResult;
    }

আমি .NET তে একটি স্ট্রিংকে নতুন লাইনগুলিতে বিভক্ত করতে এবং স্ট্রিপ্টটি বিভক্ত করার একমাত্র উপায় Split পদ্ধতির সাথে। তবে এটি আমাকে (সহজেই) একটি নতুন লাইনে বিভক্ত করার অনুমতি দেবে না, তাই এটি করার সর্বোত্তম উপায় কী?


আপনি খুব সহজেই আপনার স্ট্রিং বিভক্ত করতে সক্ষম হওয়া উচিত, যেমন:

aString.Split(Environment.NewLine.ToCharArray());

আমি বর্তমানে এই ফাংশনটি ব্যবহার করছি (অন্যান্য উত্তরগুলির উপর ভিত্তি করে) VB.NET- এ:

Private Shared Function SplitLines(text As String) As String()
    Return text.Split({Environment.NewLine, vbCrLf, vbLf}, StringSplitOptions.None)
End Function

এটি প্রথমে প্ল্যাটফর্ম-স্থানীয় নতুন লাইনটিতে বিভক্ত করার চেষ্টা করে এবং তারপরে প্রতিটি সম্ভাব্য নতুন লাইনে ফিরে আসে।

আমি শুধুমাত্র এক শ্রেণীর ভিতরে এই প্রয়োজন। যদি এটি পরিবর্তিত হয় তবে আমি সম্ভবত এই Public এবং এটি একটি ইউটিলিটি ক্লাসে স্থানান্তরিত করব এবং এমনকি এটি একটি এক্সটেনশান পদ্ধতিও তৈরি করব।

ভাল পরিমাপের জন্য লাইনগুলির ব্যাক আপে যোগদান করুন:

Private Shared Function JoinLines(lines As IEnumerable(Of String)) As String
    Return String.Join(Environment.NewLine, lines)
End Function

একটি StringReader ব্যবহার সম্পর্কে কি?

using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}

একটি স্ট্রিংতে বিভক্ত করার জন্য আপনাকে ওভারলোড ব্যবহার করতে হবে যা স্ট্রিংগুলির একটি অ্যারে নেয়:

string[] lines = theText.Split(
    new[] { Environment.NewLine },
    StringSplitOptions.None
);

সম্পাদনা:
আপনি যদি পাঠ্যতে বিভিন্ন ধরনের লাইন বিরতিগুলি পরিচালনা করতে চান তবে আপনি একাধিক স্ট্রিং মিলানোর ক্ষমতা ব্যবহার করতে পারেন। এটি সঠিকভাবে কোনও লাইন বিরতিতে বিভক্ত হবে এবং পাঠ্যতে খালি লাইন এবং ফাঁক সংরক্ষণ করবে:

string[] lines = theText.Split(
    new[] { "\r\n", "\r", "\n" },
    StringSplitOptions.None
);

খুব সহজ, আসলে।

VB.NET:

Private Function SplitOnNewLine(input as String) As String
    Return input.Split(Environment.NewLine)
End Function

সি #:

string splitOnNewLine(string input)
{
    return input.split(environment.newline);
}

নিরীহ উত্তর: একটি অস্থায়ী ফাইল লিখুন যাতে আপনি File.ReadLines ফাইল। File.ReadLines ব্যবহার করতে পারেন

var s = "Hello\r\nWorld";
var path = Path.GetTempFileName();
using (var writer = new StreamWriter(path))
{
    writer.Write(s);
}
var lines = File.ReadLines(path);

ভাল, আসলে বিভক্ত করা উচিত:

//Constructing string...
StringBuilder sb = new StringBuilder();
sb.AppendLine("first line");
sb.AppendLine("second line");
sb.AppendLine("third line");
string s = sb.ToString();
Console.WriteLine(s);

//Splitting multiline string into separate lines
string[] splitted = s.Split(new string[] {System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

// Output (separate lines)
for( int i = 0; i < splitted.Count(); i++ )
{
    Console.WriteLine("{0}: {1}", i, splitted[i]);
}

সাধারণ সমাধান করার জন্য স্ট্রিং.প্লিট ব্যবহার করা এড়াতে চেষ্টা করুন, কারণ আপনি ফাংশনটি ব্যবহার করে সর্বত্র আরও মেমরি ব্যবহার করবেন - মূল স্ট্রিং, এবং বিভক্ত কপি উভয়ই মেমরিতে। আপনি যখন স্কেল শুরু করবেন তখন এটি একটি সমস্যা হতে পারে যে আমাকে বিশ্বাস করুন - একটি 32-বিট ব্যাচ-প্রক্রিয়াকরণ অ্যাপ্লিকেশন 100MB নথির প্রক্রিয়াকরণ চালান, এবং আপনি আট সমান্তরাল থ্রেডগুলি থেকে বেরিয়ে আসবেন। আমি আগে সেখানে ছিল না যে ...

পরিবর্তে, এই মত একটি থালা ব্যবহারকারীর ব্যবহার করুন;

    public static IEnumerable<string> SplitToLines(this string input)
    {
        if (input == null)
        {
            yield break;
        }

        using (System.IO.StringReader reader = new System.IO.StringReader(input))
        {
            string line;
            while( (line = reader.ReadLine()) != null)
            {
                yield return line;
            }
        }
    }

এটি আপনাকে আপনার ডেটা কাছাকাছি আরও মেমরি দক্ষ লুপ করতে সক্ষম করবে;

foreach(var line in document.SplitToLines()) 
{
    // one line at a time...
}

অবশ্যই, যদি আপনি এটি সব মেমরি চান, আপনি এটা করতে পারেন;

var allTheLines = document.SplitToLines.ToArray();

// using System.IO;

string textToSplit;

  if(textToSplit!=null)
   {
    List<string> lines = new List<string>();
    using (StringReader reader = new StringReader(textToSplit))
    {
        for (string line = reader.ReadLine(); line != null;line = reader.ReadLine())
        {
            lines.Add(line);
        }
    }
   }




split