读取包含逗号作为一个字段的字符串的大型csv文件

时间:2010-01-31 01:24:00

标签: matlab file-io csv large-files

我有一个 .csv文件(~26000行)。我希望能够将它读入matlab。另一个问题是,它包含一个字段中由逗号分隔的字符串的集合。

我在阅读时遇到了麻烦。我试过像tdfread这样的东西,这在这里不起作用。任何有文字的技巧我应该知道吗?

还有其他办法吗?

6 个答案:

答案 0 :(得分:2)

我不确定是什么生成了您的CSV文件但这是您的问题。

CSV文件的要点是文件本身指定了字段的分隔。如果CSV文本包含逗号,那么您无能为力。任何程序如何知道单个字段中的文本何时包含逗号,或者该逗号是字段分隔符?

正确的CSV会有文本限定符。一些发生器/阅读器为您提供了使用它的选项。标准文本限定符是“(引用)。但它可以更改,因为您的文本也可能包含这些内容。”

再一次,关于生成适当的CSV内容。

答案 1 :(得分:1)

xlsread有可能无法给出您期望的答案 - 例如,字符串是否总是出现在相同的列中?我认为(正如其他所有人似乎:-)只使用

会更健壮
fid = fopen('yourfile.csv');

然后是文本扫描

t = textscan(fid, '%s', delimiter', sprintf('\n'));
t = t{1};

或只是fgetl(帮助中的示例是完美的)。

之后你可以做一些逐行处理 - 例如,在每行的文本内容上再次使用文本扫描是一种很好的,快速的方法来获得一个允许快速分析每个行的单元格数组线。

答案 2 :(得分:0)

您遇到问题,因为您是以.csv的形式阅读,并且数据中包含逗号。您可以在Excel中获取它并操纵日期,可能使用Excel公式提取不需要的逗号。我使用.csv文件进行数据库导入相当多。我想matLab有类似的规则,即 - 数据中没有逗号。

您能告诉我们有关您的数据的更多信息吗?是否有逗号,我们只有一列?也许你可以用制表符分隔阅读它?

答案 3 :(得分:0)

因为正如其他人所观察到的那样,你的文件是带有逗号的CSV文件,你认为它是一个单独的字段,所以很难说服Matlab真的只有一个字段。我认为您最好的策略是一次读取一行,作为缓冲区的字符串,并逐字段地将其转换为您想要的变量或其他数据结构。由于Matlab具有内置的正则表达式功能,因此这不应该太难。

并且,正如其他人已经建议的那样,发布您的数据样本将有助于我们为您提供帮助。

答案 4 :(得分:0)

您使用的是Unix系统吗?我问的原因是你可以使用命令行函数,如sed和正则表达式来清理这些数据文件,然后再将它们传递给Matlab。这是一个link,解释了如何准确地完成您正在寻找的内容。

答案 5 :(得分:0)

一个简单的解决方案是:

path='C:\folder1\folder2\';
data = 'data.csv';
data = dataset('xlsfile',sprintf('%s\%s', path,data));

当然,您也可以执行以下操作:

[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));

现在您将数据作为数据集加载。例如,获取第1列的简单方法是

双(数据(1))