用逗号读取大的 .csv 文件 MATLAB [重复]

Posted

技术标签:

【中文标题】用逗号读取大的 .csv 文件 MATLAB [重复]【英文标题】:Reading big .csv file MATLAB with commas [duplicate] 【发布时间】:2016-07-19 08:01:13 【问题描述】:

我有一个大的 csv 文件(650 万 x 25)并试图将其加载到 Matlab。我已经尝试过xlsreadcsvread,但都没有得到满意的结果。我读到我可以通过使用textscan 来实现它。

我的数据是这样的:

date_time;writetime;F1;F2;F3;R1;h12;b12;h_main;
01.01.2016 0:00:01;504910801075;1;1;1;3,94;799;1515;3,877;
01.01.2016 0:00:02;504910802314;1;1;1;3,96;795;1516;3,857;

第一行是标题。其他行是数据。所有其他行的格式相同。

我的代码:

fileID = fopen('value1.csv','r');
formatSpec = '%s; \n';

formatSpec1 = '%s%f %f %f %f %f %f %f %f %f %f\n';
A1 = fscanf(fileID, formatSpec);

A2 = textscan(fileID, formatSpec1,'Delimiter',';', ',');

我将标题读到A1 没关系:

A1 =
date_time;writetime;F1;F2;F3;R1;h12;b12;h_main;

也将数据读取到A2

A2 = 
    1x1 cell   [5.0491e+11]   [1]   [1]   [1]   [3]   [94]   [799]   [1515]   [3]   [877]

但是如何读取3,94 的值呢?因为在此列中它可以只是40,064 的值。

希望得到您的帮助!

【问题讨论】:

这些数字总是有小数分隔符吗?像 4,00 您的字段以; 分隔,因此请勿使用逗号, 作为字段分隔符。 @Finn 不,可以只是4 @SembeiNorimaki 你是对的!我已经在我的代码中更改了它。 【参考方案1】:

我会将它们视为字符串。以下工作。

fileID = fopen('value1.csv','r');
formatSpec = '%s; \n';
A1 = fscanf(fileID, formatSpec);
formatSpec1 = '%s%f %f %f %f %s %f %f %s\n';
A2 = textscan(fileID, formatSpec1,'Delimiter',';');
A26 = str2double(strrep(A26,',','.'));
A2end = str2double(strrep(A2end,',','.'));

1x1 cell    [5.0491e+11]    [1]    [1]    [1]    [3.94]    [799]    [1515]    [3.8770]

【讨论】:

我也是这样!之前没听说过strrep,谢谢! 我对您的解决方案有一个改进:我们不能使用strrep( char(A212), ',','.'); Error using strrep Input strings must have one row. 但我们可以使用str2double( strrep( A212, ',','.') ); ? A2数组的大小是9,对吧?另外,A2end 是一个字符串,对吧? 哦,我的索引失败了 - 在我的问题中,我展示了简化的示例,在我的真实数据中它要大得多。我的意思当然是A26strrep 想得到一行,但 char(A26) 是一列。 我明白了。 strrep 也适用于单元格。变了!

以上是关于用逗号读取大的 .csv 文件 MATLAB [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Matlab读取csv文件csvread函数的使用

matlab 提取csv格式文件问题

用matlab读取一个csv表格文件并输出函数图像

matlab如何读取csv 以及如何从固定位置开始读取数据

读取所有列合并为一个的csv文件:千位逗号问题

怎样从matlab中读取csv文件