使用自定义的行分隔符,从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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-02-12 ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)