用逗号读取大的 .csv 文件 MATLAB [重复]
Posted
技术标签:
【中文标题】用逗号读取大的 .csv 文件 MATLAB [重复]【英文标题】:Reading big .csv file MATLAB with commas [duplicate] 【发布时间】:2016-07-19 08:01:13 【问题描述】:我有一个大的 csv 文件(650 万 x 25)并试图将其加载到 Matlab。我已经尝试过xlsread
、csvread
,但都没有得到满意的结果。我读到我可以通过使用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
的值呢?因为在此列中它可以只是4
或0,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 是一个字符串,对吧?
哦,我的索引失败了 - 在我的问题中,我展示了简化的示例,在我的真实数据中它要大得多。我的意思当然是A26
。 strrep
想得到一行,但 char(A26)
是一列。
我明白了。 strrep
也适用于单元格。变了!以上是关于用逗号读取大的 .csv 文件 MATLAB [重复]的主要内容,如果未能解决你的问题,请参考以下文章