用于CSV导入的C#:数组或数据表还是别的什么?

时间:2017-05-16 15:21:43

标签: c# arrays csv struct

我已经在VBA / Excel中编写了一些代码,通过将CSV文件导入Excel然后执行" stuff"来分析IQ RF数据。用它。但它的速度很慢我只能同时获得超过10 ^ 6行。所以我用C#重新编写它,但我只是C#/ VS的新手,所以学习曲线很大......

我是否应该尝试将64x10 ^ 6行放入某种数据库,转换为二维数组,结构或其他类型的数据结构?我应该知道的任何限制/好处?

(计划是计算每个数据点的2'列的平方和的对数,以找到幅度,并添加一个时间列'。完成之后,我将根据幅度计算事件的开始和停止时间,并最终得到另一个新的数据集,分析将继续进行。)

3 个答案:

答案 0 :(得分:0)

似乎任何关系数据库都可以在这里工作。由于您在.NET中工作,最简单的方法是使用Sql Server Express。请参阅:https://www.microsoft.com/en-us/sql-server/sql-server-editions-express 请记住,它具有10Gb的数据库大小限制。

答案 1 :(得分:0)

您甚至可以不使用任何c#,只在SQL中执行此操作 - 它可以执行计算和条件操作,也可以将CSV数据直接导入表中。 如果你google有很多例子;)(即,你的日志计算搜索'LOG(Transact-SQL)')

答案 2 :(得分:0)

根据您的描述,听起来您的数据是一个数字系列(随时间变化的值),并且您不需要额外的长期存储数据,而是一种处理数据以提供报告的方法。

假设您有足够的可用内存,那么使用数组并循环遍历它们可能是最简单的。这是一个比使用数据库小得多的学习曲线,您不需要数据库可以提供的更高功能。

但是,如果您的输入非常大,则内存可能会成为问题。如果您可以将数据分成较小的块,则可以减少工作中的数据。即,读取前1000个数据点,处理它们,然后用接下来的1000个数据点重新加载数组。

另一个想法 - 这些数据来自哪里?该问题意味着记录的数据集。也许该来源还提供了处理数据的工具。

作为一个例子,我使用了一个实验室数据采集系统,该系统记录了5KHz的~600个通道;原始文件很庞大,采用专有格式。有一些方法可以将数据导出为CSV或其他通用格式,但由于文件大小的原因,它们很难处理,导出过程本身也很繁琐。制造商提供了一个与C#兼容的DLL“工具包”库,我可以用它来相对轻松地打开和读取本机文件。