【问题标题】:Best C# Method to access contents of a text file访问文本文件内容的最佳 C# 方法
【发布时间】:2018-12-03 00:59:11
【问题描述】:

我开始从VB6 移动到C#。虽然我是一位经验丰富的程序员(40 多年),但我通常是知道新的结构才是最大的帮助,而不是努力逐行翻译。 Out 公司通过包含行列表的文本文件接收订单。

XXX=param1;param2
YYY=param1;param2

在 VB6 中,我创建了一个非常复杂的字符串类,用于搜索、提取、更新、添加、删除和插入这些行。

C# 是否提供已经存在的构造,或者我需要自己编写。 Dictionary 结构看起来不错,但我担心值的数量,以及是否有一种方法可以一次性导入文件而无需逐行读取。

【问题讨论】:

  • File.ReadLines()。然后在';'字符上分割每一行
  • @maccettura 我删除了我的评论
  • @Ajay2707 了解我对使用 List 的看法。使用列表,您还可以使用内置方法对内容执行进一步的操作。
  • 您输入的文本文件有多大?您可能希望逐行读取非常大的文件,这样您就不会使用大量内存。我已经编程了 40 年,在解析文本文件方面并没有真正改变。有些人使用正则表达式,它同样有效,并且不处理具有许多不同格式的输入。我有时会使用 Regex 将一行解析为单独的参数。

标签: c# string file dictionary file-read


【解决方案1】:

不,C# 不提供这种东西,您需要编写自己的文件解析器(可能就像您在 VB6 中已有的一样)。

我认为字典在这里不会对您有所帮助(除非我不了解您的文件结构),字典用于键值对(因此每个条目有 2 个值)但您似乎有简单的参数(意思是您的条目看起来不像键值对)。

你只需要创建 1-2 个类来进行解析会容易得多:

  • File.ReadAllLines 读取文本文件并获取行数组。
  • line.Split(';') 获取每一行的参数(假设你为每一行)。

【讨论】:

  • 非常感谢您提供的信息。最多有 300 行,所以我猜它又回到了使用逐行翻译 :)
【解决方案2】:

你没有提到 C# 版本,@jonskeet 在这个answer 中提到了关于File.ReadLines

如果您使用的是 .NET 4,只需使用 File.ReadLines 即可 为你。我怀疑它和你的差不多,除了它也可以使用 FileOptions.SequentialScan 和更大的缓冲区(128 似乎很小)。

根据上面的答案,我搜索了将文件结果转换为列表的选项,我得到了answer,所以转换后你也使用 linq。

List<string> allLinesText = File.ReadAllLines(fileName).ToList()

【讨论】:

  • 为什么使用 ReadLines() 然后立即调用 ToList()?要么对来自 ReadLines() 的结果 IEnumerable 执行一些处理,要么只调用 File.ReadAllLines()。有区别(IEnumerable Vs List)
  • .ToList 将转换为数组结果到列表,请参阅第二个链接中的@Rama 结果。
  • 我错了。 ReadAllLines() 返回一个数组。如果您没有对 IEnumerable 进行任何处理,那么不使用 ReadAllLines() 仍然很奇怪。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多