使用自定义的行分隔符,从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