我有一个非常大的.csv文件(约26000行),想要将其读入Matlab。另一个问题是它包含了一个字段中用逗号分隔的字符串集合。
我无法成功读取它。我尝试了tdfread等方法,但不起作用。你知道textscan的一些技巧吗?
还有其他方法吗?
我有一个非常大的.csv文件(约26000行),想要将其读入Matlab。另一个问题是它包含了一个字段中用逗号分隔的字符串集合。
我无法成功读取它。我尝试了tdfread等方法,但不起作用。你知道textscan的一些技巧吗?
还有其他方法吗?
xlsread有可能不会给你期望的答案——例如,字符串总是出现在相同的列中吗?我认为(似乎所有人都这么认为),更健壮的方法是直接使用
fid = fopen('yourfile.csv');
然后使用textscan函数
t = textscan(fid, '%s', delimiter', sprintf('\n'));
t = t{1};
或者只是使用fgetl
(帮助中的示例非常完美)。
之后,您可以进行一些逐行处理--例如,在每行的文本内容上再次使用textscan是一种不错的快速方法,可以获得一个单元数组,从而可以快速分析每行。
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));
现在你已经将数据加载为数据集。例如获取第一列的简单方法是
double(data(1))
你遇到了一个问题,因为你将它读入为 .csv 文件,并且你的数据中有逗号。你可以在 Excel 中获取它并操作日期,可能使用 Excel 公式提取不需要的逗号。我经常使用 .csv 文件进行数据库导入。我想 matLab 也有类似的规则,即 - 数据中不能有逗号。
你能告诉我们更多关于你的数据吗?是否整个数据中都有逗号,还是只有一个列?也许你可以将其读入为制表符分隔的文件?
正如其他人所观察到的那样,您的文件是带有逗号的CSV文件,而逗号在您认为是单个字段的内部,这将很难让Matlab相信那确实只是一个字段。我认为您最好的策略是逐行读取,进入充当缓冲区的字符串,并将其逐个字段地转换为您想要的变量或其他数据结构。由于Matlab具有内置的正则表达式功能,因此这不应该太难。
另外,正如其他人已经建议的那样,发布一份数据样本将有助于我们帮助您。
sed
和正则表达式,在将数据文件传递到Matlab之前清理这些文件。这里有一个link,它解释了如何做到你所需要的。