【问题标题】:preferred method of querying首选查询方法
【发布时间】:2013-03-25 21:35:35
【问题描述】:

按列和查询列读取变量的更优化方法是什么。这是我目前正在做的事情。

var lines = File.ReadAllLines("readme.csv").Select(a => a.Split(','));

//load columns into variables
var col1 = from line in lines select line[1];
var col2 = from line in lines select line[2];
var col3 = from line in lines select line[3];
var col4 = from line in lines select line[4];

//query column 1
foreach (string line in col1)
{ //query if ...
}
//query column 2
foreach (string line in col2)
{ //query if ...
}
//query column 3
foreach (string line in col3)
{ //query if...
}

【问题讨论】:

  • 每个循环的主体都一样吗?
  • 你在问什么?你正在做的事情可能需要这么多代码,但是如果没有更多代码可以查看,我无法说出你真正想知道的内容。
  • 听起来多维数组在这里很合适,但@IlyaIvanov 是对的,处理是否相同?
  • 不确定查询,但您可以考虑将File.ReadAllLines 更改为File.ReadLines。它们具有相同的最终效果,但ReadLines 不会一次将整个文件加载到内存中。相反,它一次加载一小部分文件。
  • 如果您查看此答案,您可以看到该人创建了一个匿名类型以便更轻松地访问列成员:stackoverflow.com/a/1375435/361899

标签: c# csv


【解决方案1】:

按列和查询列读取变量的更优化方法是什么。

您正在尝试解决以前已解决的问题。 CSV 文件存在许多与转义和引用相关的细微差别。

我建议使用 Code Project 中的 CSV Reader。

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

我已将它广泛用于非常大的数据文件(多 GB)。

使用BufferedStream 以获得最佳性能:

using (FileStream fs = File.Open(csvPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (CsvReader csv = new CsvReader(new StreamReader(bs), true))

【讨论】:

【解决方案2】:

ToList() 防止评论中回答的重复循环

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多