zoukankan      html  css  js  c++  java
  • 使用自定义的行分隔符,从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();
    
                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

  • 相关阅读:
    To select the file to upload we can use the standard HTML input control of type
    Cascading Menu Script using Javascript Explained
    网站首页head区代码规范
    轻松掌握 Java 泛型
    JDK 5.0 中的泛型类型学习
    如何在firefox下获取下列框选中option的text
    是同步方法还是 synchronized 代码? 详解多线程同步规则
    javascript select option对象总结
    Select的动态取值(Text,value),添加,删除。兼容IE,FireFox
    javascript在ie和firefox下的一些差异
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/12298475.html
Copyright © 2011-2022 走看看