处理CSV文件中空数字单元格的正确方法

时间:2018-08-20 08:31:31

标签: c# csv

我正在通过编写自己的CSV导入方法(在c#btw中)从商业测量处理软件中读取CSV文件。内容有点奇怪,因为许多间歇性的空单元格出现在应该有数值的地方。像这样:

  

Zeit [s];速度[m / s]距离[m]; X [m /s²]; Y [m /s²]; Z [m /s²]; Zext [m /s²];

     

0,100000; 0,000000; 0,000000; 0,004023; 0,009220; -0,007959; 0,035353;

     

0,100167; ; ; ; ; ; -0,021732;

     

0,100333; ; ; ; ; ; -0,003706;

     

0,100500; ; ; ; ; ; 0,041362;

     

0,100667; ; ; ; ; ; 0,035353;

     

0,100833; ; ; ; ; ; 0,044366;

     

0,101000; 0,000000; 0,000000; -0,003253; 0,000765; 0,003821; 0,008312;

     

0,101167; ; ; ; ; ; -0,006710;

     

0,101333; ; ; ; ; ; -0,027741;

     

以此类推...

是否有CSV约定,规定相应列为数字时如何处理缺失值?

在我看来,从特定的实验环境来看,缺失值应该是恒定的(即保持在该列中的最后一个有效值),但是当我为CSV编写通用导入过滤器时,我想安全地假设来自不同来源的CSV总是

时间列/横坐标是什么:如果它们曾经丢失了一些值,则将它们保持恒定是没有意义的(而且由于我不确定横坐标始终在第一列中,所以我不知道)不知道该怎么保持不变!)...

否则,我要问自己一个商业软件包如何扔掉CSV文件这样的定义不清的垃圾。

PS:很抱歉,如果c#标记错误,那只是我正在编码的语言,但与问题没有直接关系。如果不需要,可以将其删除。

3 个答案:

答案 0 :(得分:1)

  

通过编写自己的CSV导入方法

不这样做吗?有多个库可以为您做到这一点,每个库都比您手工编写的库要好,因为它们在经验,测试和实际使用上有多年的工作量。

  

从特定的实验环境来看,显而易见的是,缺失值应该是恒定的

这与CSV无关。这是您的程序逻辑。您的数据格式定义您的值丢失。这就是普通的CSV阅读器将为您完成的工作。您的业​​务逻辑可能是因为缺失的值将被其最后的已知值代替。

因此,您需要将其放置在程序的两个不同部分中。数据导入(csv读取)和业务逻辑。

答案 1 :(得分:0)

基本上,Zext加速度(假定是另一个传感器值)比其他值更频繁地被拉。 六分之一毫秒,而其他每毫秒更新一次。

因此,为了节省空间,其他值将被忽略而不被写入,以免使CSV文件不必要地增长。 您必须自己定义哪些数据对您至关重要? 如果要在关系数据库中写入值,则将使用为数据类型定义的空间,如果您要写入外推值(假设是从上一个“全行”中获取值)或零

因此,如果不需要Zext值,请忽略整行,否则可以从以前的完整行中推断/复制这些值。

答案 2 :(得分:0)

如我所见,您有定界符“;”,可以基于定界符进行拆分。这样,您可以读取单元格的内容(是否为空)。