使用多个csv文件在数据存储中追踪行

时间:2016-12-07 10:45:27

标签: matlab csv

Matlab 2015b

我有几个大的(100-300MB)csv文件,我想合并为一个并过滤掉一些列。它们的形状如下:

timestamp         | variable1 | ... | variable200
01.01.16 00:00:00 | 1.59      | ... | 0.5
01.01.16 00:00:01 | ...
.
.

对于此任务,我使用的数据存储类包括所有csv文件:

ds = datastore('file*.csv');

当我读取所有条目并尝试使用writetable将它们写回csv文件时,我收到错误,输入必须是单元格数组。

在调试模式下查看从数据存储区读取的单元阵列时,我注意到,有几行只包含一个时间戳,这些行不在原始文件中。这些列位于文件的最后一行和后一行的第一行之间。这些行的时间戳是上一个时间戳的逻辑延续(就像使用excel一样)。

这是一个错误还是预期的行为?

我可以首先避免阅读这些行,还是之后必须将它们过滤掉?

提前致谢。

1 个答案:

答案 0 :(得分:0)

由于似乎没有其他人有这个问题,我将分享我最终如何处理它:

<parameter name="env" value="xxx"/>
<parameter name="testName" value="Supplier: SKY Test"/>


<test name="multicom-test-sky">

    <!--Build Post URL from the following-->
    <parameter name="protocol" value="http://"/>
    <parameter name="env" value="xxxx"/>
    <parameter name="server" value="xxxx"/>
    <parameter name="port" value="xxx"/>
    <parameter name="endPoint" value="xxx"/>

    <!--Syndicator login-->
    <parameter name="syndicatorID" value="xxxxxxx"/>
    <parameter name="syndicatorPassword" value="xxxxxx"/>
    <parameter name="target" value="test"/>

    <!--Searching Parameters-->
    <parameter name="departure" value="LGW"/>
    <parameter name="destination" value="GVA"/>
    <parameter name="supplier" value="SKY"/>
    <parameter name="numOfAdults" value="2"/>
    <parameter name="numOfChildren" value="2"/>
    <parameter name="numOfInfants" value="0"/>
    <parameter name="startDate" value="20170318"/>
    <parameter name="endDate" value="20170318"/>
    <parameter name="minNumberofNights" value="7"/>
    <parameter name="maxNumberofNights" value="7"/>
    <parameter name="childOneAge" value="15"/>
    <parameter name="childTwoAge" value="10"/>

    <!--tests to run-->
    <classes>
        <class name="com.multicom.fab.api.EndToEndSimpleBooking"/>
    </classes>
</test>

我拿了表的第二列并检查了一个空字符串。然后我通过逻辑索引用空数组填充所有有缺陷的行。 (如Matlab文档中所示)

遗憾的是,我找不到任何方法来阻止加载错误的数据,但最终在内存中执行此处理步骤的数据量并不大。