使用自定義的行分隔符,從StreamReader中讀取一行字符串


在C#中,StreamReader的ReadLine方法是不支持自定義行分隔符的。這導致很多文本文件的行分隔符如果不是"\r"和"\n",那么使用StreamReader就無法正確讀取到一行字符串。

所以我們這里采用一個.NET Core控制台項目,自定義一個ReadLineWithDelimiter擴展方法,演示使用自定義的行分隔符,從StreamReader中讀取一行字符串,代碼如下:

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

namespace NetCoreReadline
{
    /// <summary>
    /// StreamReader擴展類
    /// </summary>
    public static class StreamReaderExtension
    {
        /// <summary>
        /// 使用自定義的行分隔符,從StreamReader中讀取一行字符串
        /// </summary>
        /// <param name="streamReader">StreamReader類對象實例</param>
        /// <param name="delimiter">自定義的行分隔符</param>
        /// <returns>從StreamReader中讀取的一行字符串</returns>
        public static string ReadLineWithDelimiter(this StreamReader streamReader, string delimiter)
        {
            StringBuilder sb = new StringBuilder();

            if (delimiter == null)
            {
                throw new ArgumentNullException("delimiter");
            }

            if (delimiter == string.Empty && !streamReader.EndOfStream)
            {
                return ((char)streamReader.Read()).ToString();
            }

            while (!streamReader.EndOfStream)
            {
                char currentChar = (char)streamReader.Read();//如果StreamReader采用的是支持中文的編碼,例如Encoding.UTF8,那么這里讀取到的字符char類型也會是中文,不會是亂碼
                sb.Append(currentChar);

                //表示StreamReader讀取到一個完整的行分隔符了
                if (sb.ToString().EndsWith(delimiter))
                {
                    sb.Remove(sb.Length - delimiter.Length, delimiter.Length);
                    break;
                }
            }

            return sb.ToString();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string filepath = AppDomain.CurrentDomain.BaseDirectory + "Data\\RawData.txt";

            using (StreamReader streamReader = new StreamReader(filepath, Encoding.UTF8))
            {
                while (!streamReader.EndOfStream)
                {
                    string lineText = streamReader.ReadLineWithDelimiter("||");//定義"||"為行分隔符

                    Console.WriteLine("StreamReader 讀到一行字符串:\"{0}\"", lineText);
                }
            }

            Console.WriteLine("按任意鍵結束程序...");
            Console.ReadKey();
        }
    }
}

我們在Program類的Main方法中,使用了自定義的行分隔符"||",來從StreamReader中讀取每一行字符串。

其中讀取的文本文件"RawData.txt"為UTF-8編碼,其文本內容如下所示:

昨天天氣不錯ABC||今天天氣不錯EFG||明天天氣不錯HIJ

按照行分隔符"||",該文本文件就有三行字符串。

最終,程序運行的結果,如下所示:

所以,我們可以看到三行字符串都被正確地讀取出來了。

 

 

參考文獻:

C# StreamReader, “ReadLine” For Custom Delimiters

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM