我有一个大 .csv文件(~26000行)。我希望能够将它读入matlab。另一个问题是,它包含一个字段中由逗号分隔的字符串的集合。
我在阅读时遇到了麻烦。我试过像tdfread这样的东西,这在这里不起作用。任何有文字的技巧我应该知道吗?
还有其他办法吗?
答案 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))