使用自定义的行分隔符,从StreamReader中读取一行字符串

怎甘沉沦 提交于 2020-02-12 12:37:06

在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();
            bool found = false;

            while (!found && !streamReader.EndOfStream)
            {
                for (int i = 0; i < delimiter.Length; i++)
                {
                    char c = (char)streamReader.Read();//如果StreamReader采用的是支持中文的编码,例如Encoding.UTF8,那么这里读取到的字符char类型也会是中文,不会是乱码
                    sb.Append(c);

                    if (c != delimiter[i])
                        break;

                    //表示读取到一个完整的行分隔符了
                    if (i == delimiter.Length - 1)
                    {
                        sb.Remove(sb.Length - delimiter.Length, delimiter.Length);
                        found = true;
                    }
                }
            }

            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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!