Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-为什么';使用for循环导入数据时是否更新t fileID变量?_Matlab_While Loop_Data Import - Fatal编程技术网

Matlab-为什么';使用for循环导入数据时是否更新t fileID变量?

Matlab-为什么';使用for循环导入数据时是否更新t fileID变量?,matlab,while-loop,data-import,Matlab,While Loop,Data Import,我使用Matlab的导入数据代码生成器将数据传递给一系列命令。当我运行脚本并引用单个文件时,这很好,但是如果我循环遍历多个文件,我的变量不会像我预期的那样更新。我相信我已经将问题追溯到了“fileID”在循环的第一次迭代后没有更新 在下面的代码中,我可以确认“filename”是随着循环的每次迭代而更新的,而“fileID”不是。因此,在每次迭代中,相同的向量被分配给变量“y” 有人能告诉我哪里出了问题吗 FileList = dir('*.csv'); N = size(FileList,1)

我使用Matlab的导入数据代码生成器将数据传递给一系列命令。当我运行脚本并引用单个文件时,这很好,但是如果我循环遍历多个文件,我的变量不会像我预期的那样更新。我相信我已经将问题追溯到了“fileID”在循环的第一次迭代后没有更新

在下面的代码中,我可以确认“filename”是随着循环的每次迭代而更新的,而“fileID”不是。因此,在每次迭代中,相同的向量被分配给变量“y”

有人能告诉我哪里出了问题吗

FileList = dir('*.csv');
N = size(FileList,1);
for k = 1:N

 % get the file name:
filename = FileList(k).name;
delimiter = ',';
startRow = 2;

%% Format string for each line of text:
%   column2: double (%f)
%   column3: double (%f)
%   column4: double (%f)
%   column5: double (%f)
% For more information, see the TEXTSCAN documentation.
formatSpec = '%*s%f%f%f%f%[^\n\r]';

%% Open the text file.
fileID = fopen(filename,'r');

%% Read columns of data according to format string.
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines' ,startRow-1, 'ReturnOnError', false);

%% Close the text file.
fclose(fileID);

%% Allocate imported array to column variable names
O1 = dataArray{:, 1};
H1 = dataArray{:, 2};
L1 = dataArray{:, 3};
C1 = dataArray{:, 4};

%% Test filename and fileID
filename
fileID

%% Clear temporary variables
clearvars filename delimiter startRow formatSpec fileID dataArray ans;
y=C1;
figure 
plot(y);

end
FileID不应该像您预期的那样更改。fileID只是一个文件标识符,在fileID的帮助下扫描文本时,提取的数据位于dataArray中


因此,如果您只打开文件并在打开新文件之前将其关闭,则FileID通常等于3。如果不关闭它,每个文件的fileID中将有一个不同的数字。

当执行
fclose(fileID)
时,实际的
fileID
句柄(通常是一个整数)被释放。因此,下次打开文件时,以前使用的
fileID
将可用,并将再次用于打开新文件,因此它在当前代码中始终显示相同。这并不意味着处理了同一个文件。@Hoki-你应该回答这个问题。这正是它发生的原因。为了进一步解释
3
1
是控制台标准输出的保留id,
2
是错误输出的保留id。您打开的第一个文件是id
3
,第二个文件是id
4
。如果您对是否打开了正确的文件有任何疑问,请使用
fopen(fileID)
,它会告诉您哪个文件属于id。感谢您的回复,非常清楚,我现在了解了fileID的用法。