【问题标题】:read text file and writing to a list读取文本文件并写入列表
【发布时间】:2012-12-27 16:57:04
【问题描述】:

他们是否可以一次将文本文件拆分到多个位置并保存到列表中?

我能够在一个地方进行拆分并写入这样的列表:

var incomplete = File
            .ReadAllLines(path)
            .Select(a => a.Split(new[] { '|' }, StringSplitOptions.None)[5].Trim())
            .ToList();

我想分成四个位置,然后写入一个列表。

var mnbrs = File
            .ReadAllLines(path)
            .Select(a => a.Split('|')[2].Trim())
            .Select(b => b.Split('|')[5].Trim())
            .Select(c => c.Split('|')[6].Trim())
            .Select(d => d.Split('|')[11].Trim())
            .ToList();

这给了我错误索引超出了数组的范围。

感谢任何帮助。 我也可以以不同的方式拆分和阅读文件。 我只是想避免读取文件拆分一次然后列出然后读取 agian 并再次拆分并执行四次。

【问题讨论】:

  • 你能举一个你的文本文件的例子吗?
  • 我相信您超出了界限,因为每个 Select 都在处理前一个 Select 的结果。您可以通过将每个 Select 拆分为一个单独的变量并对该创建的变量执行下一个函数来进行调试。

标签: c# linq parsing split


【解决方案1】:

您想分两步完成。首先拆分,然后选择各个列:

File
    .ReadAllLines(path)
    .Select(a => a.Split(new[] { '|' }, StringSplitOptions.None))
    .Select(a => new {
        Column1 = a[2].Trim(),
        Column2 = a[5].Trim(),
        Column3 = a[6].Trim(),
        Column4 = a[11].Trim()
    })
    .ToList();

演示:http://ideone.com/aNyNT5

【讨论】:

  • 他们是一种方法来拆分 a[5] 中的数据,如 split(' ') 并将第一部分保存到某物并将另一部分保存到另一列吗?跨度>
  • 当然。 Column2_Part1 = a[5].Trim().Split(' ')[0], Column2_Part2 = a[5].Trim().Split(' ')[1]。尽管随着您添加更多复杂性,我不会总是尝试将其硬塞到单个 LINQ 语句中。此方法导致每行发生两次拆分,这比在完成相同事情的自定义foreach 循环中一次执行所有操作效率低。此外,您可能会发现创建一个具有 Column1、Column2 等属性的自定义类有助于在不同方法之间传递这些数据。
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2016-10-06
相关资源
最近更新 更多