我有一个大的.csv 文件(~26000 行)。我希望能够将它读入matlab。另一个问题是它在其中一个字段中包含由逗号分隔的字符串集合。
我无法阅读它。我尝试了 tdfread 之类的东西,但在这里不起作用。我应该注意的 textscan 的任何技巧?
还有其他方法吗?
我有一个大的.csv 文件(~26000 行)。我希望能够将它读入matlab。另一个问题是它在其中一个字段中包含由逗号分隔的字符串集合。
我无法阅读它。我尝试了 tdfread 之类的东西,但在这里不起作用。我应该注意的 textscan 的任何技巧?
还有其他方法吗?
我不确定是什么生成了您的 CSV 文件,但这是您的问题。
CSV 文件的重点在于文件本身指定了字段的分隔。如果 CSV 的文本包含逗号,那么您无能为力。任何程序如何知道单个字段中的文本何时包含逗号,或者该逗号何时是字段分隔符?
正确的 CSV 会有一个文本限定符。一些生成器/阅读器让您可以选择使用其中一个。标准文本限定符是“(引号)。但它是可变的,因为您的文本也可能包含这些。
同样,这一切都是为了生成正确的 CSV 内容。
xlsread 有可能不会给您期望的答案——例如,字符串是否总是出现在相同的列中?我认为(正如其他人似乎:-) 只使用它会更健壮
fid = fopen('yourfile.csv');
然后要么 textscan
t = textscan(fid, '%s', delimiter', sprintf('\n'));
t = t{1};
或者只是fgetl
(帮助中的示例是完美的)。
之后,您可以进行一些逐行处理——例如,在每行的文本内容上再次使用 textscan 是一种很好、快速的方法来获得一个可以快速分析每行的单元数组。
您遇到问题是因为您将其作为 .csv 文件读取,并且数据中有逗号。您可以在 Excel 中获取它并操作日期,可能使用 Excel 公式提取不需要的逗号。我经常使用 .csv 文件进行数据库导入。我想 matLab 有类似的规则,那就是 - 你的数据中没有逗号。
你能告诉我们更多关于你的数据吗?是否有逗号,我们只有一列?也许您可以将其读取为制表符分隔?
一种简单的解决方案是:
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))
你用的是Unix系统吗?我问的原因是您可以使用命令行函数(例如sed
正则表达式)在将这些数据文件传递给 Matlab 之前清理它们。这是一个链接,它解释了如何完全按照您的要求进行操作。
因为,正如其他人所观察到的那样,您的文件是 CSV,在您认为的单个字段中带有逗号,因此很难说服 Matlab 这实际上只是一个字段。我认为您最好的策略是一次读取一行,将其读入一个充当缓冲区的字符串,然后逐个字段地将其转换为您想要的变量或其他数据结构。由于 Matlab 具有内置的正则表达式功能,这应该不会太难。
而且,正如其他人已经建议的那样,发布您的数据样本将有助于我们为您提供帮助。