使用自定义的行分隔符,从streamreader中读取一行字符串(代码片段)

opencoder opencoder     2023-04-19     550

关键词:

在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

 

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

...,然后取出就方便了。见后面的示例代码 参考技术AStreamReader不能实现自定义读取某一行的文字。StreamReader只能向前读取,如果要实现指定某行的文字,只能自己封装实现。读取到最后,如何跳回第一行?使用下面的语句:St... 查看详情

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

】使用微调器从自定义列表视图中删除了错误的行【英文标题】:Wrongrowdeletedfromcustomlistviewwithspinner【发布时间】:2015-11-0919:25:26【问题描述】:我正在开发包含自定义ListView的应用程序,该应用程序带有我从主活动更新的删除... 查看详情

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

】想检查IFFile.Exists来定义StreamReader,然后搜索特定的行【英文标题】:WanttocheckIFFile.ExiststodefineStreamReader,tothensearchingforspecificline【发布时间】:2021-06-1019:56:12【问题描述】:我不经常写代码,我的知识水平还很低。我想不通的... 查看详情

无法在 UI 表格视图自定义单元格中插入分隔符

】无法在UI表格视图自定义单元格中插入分隔符【英文标题】:Can\'tmakeseperatorinsetsinUItableviewcustomcell【发布时间】:2016-03-2311:00:02【问题描述】:我正在尝试制作从左右两侧插入20pt的分隔符。无论我做什么,我仍然会从一个边缘... 查看详情

UIPickerView 中的行分隔符

】UIPickerView中的行分隔符【英文标题】:RowSeparatorinUIPickerView【发布时间】:2013-12-1110:13:10【问题描述】:如何在我的选取器视图中隐藏分隔符。这是截图。这是我的自定义UIPickerView的代码。-(UIView*)pickerView:(UIPickerView*)pickerViewvie... 查看详情

PySpark 使用自定义记录分隔符读取 CSV 文件

】PySpark使用自定义记录分隔符读取CSV文件【英文标题】:PySparkreadCSVfilewithcustomrecordseparator【发布时间】:2021-05-2517:47:15【问题描述】:在pyspark中读取csv文件时,有什么方法可以使用自定义记录分隔符。在我的文件中,记录由**... 查看详情

zabbix自定义参数监控和awk命令(代码片段)

...景:逐行读入文本,按规则匹配特定的行,以空格为默认分隔符将每行切片,输出其中特定的某个切片(切开的部分可以进行各种分析处理,这里就是要输出其中以段):$cat/etc/hosts127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.l... 查看详情

从自定义数据源中获取选定的行?

】从自定义数据源中获取选定的行?【英文标题】:getselectedrowfromcustomdatasource?【发布时间】:2011-06-0215:49:22【问题描述】:我有一个显示自定义UIPickerView的视图。我还为UIPickerView提供了一个单独的DataSource类,它也是UIPicker的委... 查看详情

在 Swift 表格视图中创建自定义分隔符

】在Swift表格视图中创建自定义分隔符【英文标题】:CreatecustomseparatorinSwiftTableView【发布时间】:2021-03-2315:08:22【问题描述】:我正在尝试创建一个位于两个单元格之间的UILabel,例如表格分隔符的呈现方式。Swift的UITableView内置... 查看详情

如何在 pandas to_csv() 中设置自定义分隔符?

】如何在pandasto_csv()中设置自定义分隔符?【英文标题】:Howtosetacustomseparatorinpandasto_csv()?【发布时间】:2017-09-0513:45:59【问题描述】:从文档中我知道,为了保存为.csv文件,可以简单地执行以下操作:df.to_csv(sep=\';\')但是,我... 查看详情

如何在 iOS 7 中正确自定义 UITableViewCells 之间的分隔符插入?

】如何在iOS7中正确自定义UITableViewCells之间的分隔符插入?【英文标题】:HowcanIcorrectlycustomizetheseparatorinsetbetweetUITableViewCellsiniOS7?【发布时间】:2013-10-0222:40:10【问题描述】:当我创建一个UITableView并设置自定义分隔插入时,它... 查看详情

Magento 1.9 自定义模块 csv 分隔符

】Magento1.9自定义模块csv分隔符【英文标题】:Magento1.9custommodulecsvdelimiter【发布时间】:2018-11-1510:26:29【问题描述】:我制作了一个自定义模块,可以使用自定义SQL查询从magento导出订单。整个模块效果很好,但是我想更改csv导出... 查看详情

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

】使用create-hive-table在Hive中创建表时如何使用自定义分隔符【英文标题】:HowtousecustomdelimiterwhilecreatingtableinHiveusingcreate-hive-table【发布时间】:2016-01-2713:04:47【问题描述】:我正在尝试将数据从RDBMS表导入HDFS。然后我使用create-hi... 查看详情

使用自定义组和小数分隔符将数字格式化为字符串而不更改精度

】使用自定义组和小数分隔符将数字格式化为字符串而不更改精度【英文标题】:Formatnumbertostringwithcustomgroupanddecimalseparatorwithoutchangingprecision【发布时间】:2016-04-1902:56:59【问题描述】:我想在C#中使用自定义组/千位分隔符和小... 查看详情

正则表达式从带有空格分隔符和描述中的空格的行中读取发票行详细信息

】正则表达式从带有空格分隔符和描述中的空格的行中读取发票行详细信息【英文标题】:RegextoreadInvoiceLineDetailsfromlinewithspacedelimiterandspacesindescription【发布时间】:2021-08-0208:06:15【问题描述】:致任何正则表达式大师...我正在... 查看详情

关于hanlp自定义词典的使用

...https://github.com/hankcs/HanLP/pull/254)#Windows用户请注意,路径分隔符统一使用/root=D:/学习/data-for-1.3.3/#自定义词典路径,用;隔开多个自定义 查看详情

使用 Pig 使用自定义分隔符 (|) 进行字数统计

】使用Pig使用自定义分隔符(|)进行字数统计【英文标题】:WordCountwithcustomdelimiter(|)usingPig【发布时间】:2017-06-1302:02:30【问题描述】:我是Piglatin的新手。我想处理以下文件并计算出现次数最多的单词。Hadoop|是|一个|开放|源|基... 查看详情

python:使用自定义分隔符格式化字符串[重复](代码片段)

这个问题在这里已有答案: HowcanIprintliteralcurly-bracecharactersinpythonstringandalsouse.formatonit?9个答案 EDITED我必须使用字典中的值格式化字符串,但字符串已包含大括号。例如。:raw_string="""DATABASE='name':'DB_NAME 查看详情