csvread在MATLAB中删除行

csvread在MATLAB中删除行,matlab,csv,file-writing,Matlab,Csv,File Writing,我在5列中创建一些随机数据,并将其存储为CSV文件。这很好,我的CSV实际上包含1001行;我的数据带有标题(我通过在电子表格编辑器中打开它来检查)。但是,当我在MATLAB中使用csvread再次读取它时,如果我没有指定分隔符,并且当我指定分隔符时,data仅包含957行,则会出现一个错误,因此缺少标题和前42行。这是怎么回事 代码: 错误: 使用dlmread时出错(第139行) 文件和格式字符串之间不匹配。 从文件中读取数字时出现问题(第1u行,第1u字段)==>ColumnA,Colum

我在5列中创建一些随机数据,并将其存储为CSV文件。这很好,我的CSV实际上包含1001行;我的数据带有标题(我通过在电子表格编辑器中打开它来检查)。但是,当我在MATLAB中使用
csvread
再次读取它时,如果我没有指定分隔符,并且当我指定分隔符
时,data
仅包含957行,则会出现一个错误,因此缺少标题和前42行。这是怎么回事

代码:

错误:

使用dlmread时出错(第139行) 文件和格式字符串之间不匹配。 从文件中读取数字时出现问题(第1u行,第1u字段)==>ColumnA,ColumnB,ColumnC,ColumnD,ColumnE\n

csvread中的错误(第48行) m=dlmread(文件名,,,r,c)

我在写或读文件时是否遗漏了一些愚蠢的东西


我正在64位Windows7机器上运行MatlabR2012A。(尽管我希望在下个月升级到R2015b)

原因是您使用的是无效的
csvread
语法。从
帮助csvread

M=csvread('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)

原因是您使用的是无效的
csvread
语法。从
帮助csvread

M=csvread('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)

首先,在Matlab2014b上,我有一个不同的错误

使用dlmread时出错(第138行) 标题行必须是整数值。 csvread中的错误(第47行) m=dlmread(文件名,,,r,c)

在MATLAB中,我通常通过其数据导入接口导入数据。在
主页
选项卡上,单击
导入数据
,您可以在这里使用许多选项来确保数据导入正确。界面最好的部分是代码生成功能。您可以选择生成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;

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

首先,在Matlab2014b上,我有一个不同的错误

使用dlmread时出错(第138行) 标题行必须是整数值。 csvread中的错误(第47行) m=dlmread(文件名,,,r,c)

在MATLAB中,我通常通过其数据导入接口导入数据。在
主页
选项卡上,单击
导入数据
,您可以在这里使用许多选项来确保数据导入正确。界面最好的部分是代码生成功能。您可以选择生成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;

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

当我不使用分隔符,而是调用
data=csvread('output.csv')时,会出现错误当我使用分隔符时,它工作正常,但会删除行。我想我得用1,干杯了。我觉得有点像擦洗,因为我没有正确阅读文档~.~@Adriaan,确实是这样,这就是为什么我建议使用1:)我想如果你不指定起始行,matlab不会试图推断文件中是否有字符串头行,而是从将其解释为数字数据开始,因此出现了错误。不要对自己太苛刻,众所周知,matlab的内置数据解析函数很古怪。当我不使用分隔符,而是调用
data=csvread('output.csv')时,就会出现错误当我使用分隔符时,它工作正常,但会删除行。我想我得用1,干杯了。我觉得有点像擦洗,因为我没有正确阅读文档~.~@Adriaan,确实是这样,这就是为什么我建议使用1:)我想如果你不指定起始行,matlab不会试图推断文件中是否有字符串头行,而是从将其解释为数字数据开始,因此出现了错误。不要对自己太苛刻,众所周知,matlab的内置数据解析功能很古怪。通过GUI导入数据非常难看,效率也很低,尤其是在将文件读取器与
dir()结合使用时,一次读取大量文件。我使用GUI的原因是为了获取用于导入结构非常奇怪的数据集的代码。一旦我拿到密码,我就不知道了