代码之家  ›  专栏  ›  技术社区  ›  oliver

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

  •  0
  • oliver  · 技术社区  · 7 年前

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

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

    0100000;0000000;0000000;0004023;0009220;-0007959;0035353;

    0100333;;;;;;;;-0003706;

    0100500;;;;;0041362;

    0100667;;;;;0035353;

    0100833;;;;;0044366;

    0101167;;;;;;;;-0006710;

    0101333;;;;;;;;-0027741;

    等等。。。

    对我来说,从特定的实验上下文中可以很明显地看出,缺少的值应该是常量(即保持在该列的最后一个有效值处),但是当我为CSV编写通用导入筛选器时,我希望可以安全地假设这是 总是 CSV的例子来自不同的来源。

    否则,我会问自己,一个商业软件包怎么能扔掉CSV文件中定义不清的垃圾。

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

    3 回复  |  直到 7 年前
        1
  •  1
  •   nvoigt    7 年前

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

    别那么做?有多个库可以为您做到这一点,每一个库都比您手工编写的代码要好,因为它们在经验、测试和实际使用方面都有多个人年的经验。

    从特定的实验环境来看,很明显丢失的值应该是常量

    这与CSV无关。这是你的程序逻辑。数据格式定义缺少值。这就是一个普通的CSV阅读器会为你做的。你的商业逻辑 丢失的值将被它们最后的已知值替换。

    所以你需要把它放在程序的两个不同部分。数据导入(csv读取)和业务逻辑。

        2
  •  0
  •   DaMachk    7 年前

    你基本上得到了Zext加速度(假设它是另一个传感器值),它被拉得比其他值更频繁。 六分之一毫秒,其他的每毫秒更新一次。

    因此,为了节省空间,其他值将被忽略,而不是写入,以避免CSV文件不必要地增长。 你必须自己定义哪些数据对你至关重要?

    因此,如果Zext值对您的东西不重要,请忽略整行,否则您可以从前面的整行中推断/复制值。

        3
  •  0
  •   Olusola Omosola    7 年前