使用导入工具

时间:2016-10-12 12:15:35

标签: matlab

我想使用MATLAB 2016a中的导入工具导入多个文件(.wf格式的波形)。

这是我的(自动生成的)功能

function Ring607062016175832 = importfile(filename, startRow, endRow)
%IMPORTFILE Import numeric data from a text file as a matrix.

%   RING607062016175832 = IMPORTFILE(FILENAME) Reads data from text file
%   FILENAME for the default selection.
%

%   RING607062016175832 = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data
%   from rows STARTROW through ENDROW of text file FILENAME.
%
% Example:
%   Ring607062016175832 = importfile('Ring6_07-06-2016_17-58-32.wf', 1, 50001);
%
%    See also TEXTSCAN.

% Auto-generated by MATLAB on 2016/10/12 13:02:36

%% Initialize variables.
delimiter = ';';
if nargin<=2
    startRow = 1;
    endRow = inf;
end

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

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

%% Read columns of data according to format string.
% This call is based on the structure of the file used to generate this
% code. If an error occurs for a different file, try regenerating the code
% from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
for block=2:length(startRow)
    frewind(fileID);
    dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
    for col=1:length(dataArray)
        dataArray{col} = [dataArray{col};dataArrayBlock{col}];
    end
end

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

%% Post processing for unimportable data.
% No unimportable data rules were applied during the import, so no post
% processing code is included. To generate code which works for
% unimportable data, select unimportable cells in a file and regenerate the
% script.

%% Create output variable
Ring607062016175832 = table(dataArray{1:end-1}, 'VariableNames', {'VarName1','VarName2'});

当我使用输入参数(如

)运行函数时
importfile('Ring6_07-06-2016_17-58-32.wf', 1, 50001)

我得到一个导入文件的有效结果。

我的问题:

我想创建一个&#34; for&#34;循环从所有&#34; .wf&#34;导入数据文件。 使用此example我创建了这个&#34;用于&#34;循环在一个单独的脚本中:

numFiles = 361;
startRow = 1;
endRow = 50001;
WaveformData = cell(1,numFiles);

for fileNum = 1:numFiles
    filename = sprintf('Ring6%02d.wf',fileNum);
    WaveformData{fileNum} = importfile('filename', 1, 50001);
end

但是当我尝试运行它时,我收到了这个错误:

Error using textscan
Invalid file identifier. Use fopen to generate a valid file identifier.

Error in importfile (line 36)
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'EmptyValue'
,NaN,'HeaderLines', startRow(1)-1, 'ReturnOnError', false);

Error in Schleife (line 8)
    WaveformData{fileNum} = importfile(filename, startRow, endRow);

任何人都可以告诉我我做错了什么或者给我一个提示如何创建一个工作&#34; for -loop来导入所有文件?

1 个答案:

答案 0 :(得分:1)

更改

 WaveformData{fileNum} = importfile('filename', 1, 50001);

 WaveformData{fileNum} = importfile(filename, 1, 50001);

没有''