【发布时间】:2014-01-05 14:09:36
【问题描述】:
我正在处理一个项目,我有点困惑。我从老师那里得到了一些 txt 文件(来自his site 文件:wt40.txt、wt50.txt、wt100.txt)。
每个文件结构看起来都相似:
26 24 79 46 32 35 73 74 14 67 86 46 78 40 29 94 64 27 90 55
35 52 36 69 85 95 14 78 37 86 44 28 39 12 30 68 70 9 49 50
1 10 9 10 10 4 3 2 10 3 7 3 1 3 10 4 7 7 4 7
5 3 5 4 9 5 2 8 10 4 7 4 9 5 7 7 5 10 1 3
- 每个数字都有 6 个字符,但不是前导零,而是 空格
- 每行有 20 个数字
文件 wt40.txt 应该读作:前两行到第一个列表,接下来的两行到下一个列表,第三对行到第三个列表。下一行应该再次成对放置到这些列表中。
在 C++ 中,我以这种简单的方式进行操作:
for(int ins=0; ins<125; ins++) //125 instances in file
{
for(int i=0; i<N; i++) file>>tasks[i].p; //N elements at two first lines
for(int i=0; i<N; i++) file>>tasks[i].w;
for(int i=0; i<N; i++) file>>tasks[i].d;
tasks[i].putToLists();
}
但是当我在 C# 中编写此代码时,我必须打开 StreamReader,读取每一行,用正则表达式拆分,将它们转换为 int 并添加到列表中。这是很多循环。 我无法读取每 6 个字符并将它们添加到三个循环中,因为这些文本文件已经弄乱了行尾字符 - 有时它只是 '\n' 有时更多。
没有更简单的方法吗?
【问题讨论】:
-
调查 File.ReadAlLines 和 String.Split。此外,在 C# 问题中,我们期望 C# 代码(尝试的解决方案),而不是 C++。
-
另外,将您的数据文件的摘录作为问题的一部分发布。
-
一个与问题语义相关的小细节 - 阅读始终是“相同” (tm) 速度 - 它超出了您的控制范围。但是,它正在处理行中的数据,这会减慢读取速度。