繁体   English   中英

csvread在MATLAB中删除行

[英]csvread drops rows in MATLAB

我在5列中创建了一些随机数据,并将其存储为CSV文件。 这个工作正常,我的CSV实际上包含1001行; 我的数据带有标题(我通过在电子表格编辑器中打开它进行了检查)。 但是,当我再次使用csvread在MATLAB中读取它时,如果我未指定定界符,并且当我指定定界符data仅包含957行时出现错误,因此标题和前42行丢失。 这里发生了什么?

码:

A = rand(1e3,5);
out = fopen('output.csv','w');
fprintf(out,['ColumnA', ',', 'ColumnB', ',', 'ColumnC',  ',', 'ColumnD',  ',', 'ColumnE','\n']);
fclose(out);
dlmwrite('output.csv', A, 'delimiter',',','-append');
data = csvread('output.csv',',');

错误:

使用dlmread时出错(第139行)文件和格式字符串不匹配。 从文件读取错误的编号(行1u,字段1u)==> ColumnA,ColumnB,ColumnC,ColumnD,ColumnE \\ n

csvread中的错误(第48行)m = dlmread(filename,',',r,c);

我在写或读文件时是否缺少一些愚蠢的东西?

我在64位Windows 7计算机上运行MATLAB R2012a。 (尽管我希望在下个月升级到R2015b)

原因是您使用的csvread语法无效。 help csvread

M = csvread('FILENAME')读取以逗号分隔的值格式的文件FILENAME。 结果以M返回。文件只能包含数字值。

M = csvread('FILENAME',R,C)从R行和C列开始以逗号分隔值格式的文件读取数据。R和C从零开始,因此R = 0和C = 0指定了第一个值文件。

M = csvread('FILENAME',R,C,RNG)仅读取RNG = [R1 C1 R2 C2]指定的范围,其中(R1,C1)是要读取的数据的左上角,而(R2, C2)是右下角。 还可以使用电子表格符号指定RNG,如RNG ='A1..B7'。

无法告诉csvread使用什么定界符。 当您以这种方式调用它时,它会将'解释为数字44(以ascii格式)并将其用作起始行。

而是这样调用: data = csvread('output.csv',1);

首先,在MATLAB 2014b上,我遇到了另一个错误

使用dlmread时出错(第138行)标头行必须为整数值。 csvread中的错误(第47行)m = dlmread(filename,',',r,c);

在MATLAB中,我通常通过其数据导入接口导入数据。 Home标签上,点击Import Data ,您可以使用许多选项来确保数据导入正确。 接口的最佳部分是代码生成功能。 您可以选择生成MATLAB实际用于导入数据的代码。 例如,这就是我得到的:

filename = 'output.csv';
delimiter = ',';
startRow = 2;
formatSpec = '%f%f%f%f%f%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines', startRow-1, 'ReturnOnError', false);
fclose(fileID);
ColumnA = dataArray{:, 1};
ColumnB = dataArray{:, 2};
ColumnC = dataArray{:, 3};
ColumnD = dataArray{:, 4};
ColumnE = dataArray{:, 5};
clearvars filename delimiter startRow formatSpec fileID dataArray ans;

它可以正常工作。 如您所见,您可以轻松地修改代码以根据需要定制导入功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM