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

Posted opencoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用自定义的行分隔符,从StreamReader中读取一行字符串相关的知识,希望对你有一定的参考价值。

在C#中,StreamReader的ReadLine方法是不支持自定义行分隔符的。这导致很多文本文件的行分隔符如果不是" "和" ",那么使用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 + "DataRawData.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

 

以上是关于使用自定义的行分隔符,从StreamReader中读取一行字符串的主要内容,如果未能解决你的问题,请参考以下文章

C#中,StreamReader如何自定义从某一行读取文字?就是假设x里存有一有效的整数,就读x行。

想检查 IF File.Exists 来定义 StreamReader,然后搜索特定的行

UIPickerView 中的行分隔符

六周第三次课(3月14日)

Zabbix自定义参数监控和awk命令

使用微调器从自定义列表视图中删除了错误的行