"Error using textscan Invalid file identifier. Use fopen to generate a valid file identifier." - why am i getting this error?

4 views (last 30 days)
function allHurricaneData = getAllHurricaneData(allHurricanesFileName)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
FID = fopen(['data/' allHurricanesFileName]);
allNames = textscan(FID,'%s');
for i = 1:length(allNames{1})
hurricaneName = ['data/' allNames{1}{i}];
openFile = fopen(hurricaneName)
headerLine = fgetl(openFile);
properties = textscan(openFile,'%s %s %f %f %f %f %d %d' ,'Delimiter',',');
nameVariable =split(allNames{1}{i},'.');
allHurricaneData(i).name = nameVariable{1};
allHurricaneData(i).date = properties{1};
allHurricaneData(i).Xs = properties{5};
allHurricaneData(i).Ys = properties{6};
allHurricaneData(i).wind = properties{7};
allHurricaneData(i).pressure = properties{8};
end
end

Answers (2)

Voss
Voss on 12 Nov 2022
Edited: Voss on 12 Nov 2022
Most likely you get that error because the file ['data/' allHurricanesFileName] does not exist.
To find out for sure, you can take a look at the second output from fopen, which is an error message in case fopen cannot open the file:
[FID,msg] = fopen(['data/' allHurricanesFileName]);
if FID < 0
error('Cannot open the file: %s',msg);
end
allNames = textscan(FID,'%s');

Image Analyst
Image Analyst on 12 Nov 2022
Edited: Image Analyst on 12 Nov 2022
Replace this
for i = 1:length(allNames{1})
hurricaneName = ['data/' allNames{1}{i}];
openFile = fopen(hurricaneName)
with this more robust code that has error checking in it:
for i = 1:length(allNames{1})
hurricaneName = ['data/' allNames{1}{i}];
if ~isfile(hurricaneName)
% File not found. Perhaps the folder name was not prepended with fullfile().
warningMessage = sprintf('Warning: this file does not exist:\n%s', hurricaneName)
uiwait(warndlg(warningMessage))
continue; % Skip to bottom of loop and keep going.
end
openFile = fopen(hurricaneName)
if openFile == -1
% Could be due to a variety of things, like it's open and locked in
% another application.
warningMessage = sprintf('Warning: error opening this file :\n%s', hurricaneName)
uiwait(warndlg(warningMessage))
continue; % Skip to bottom of loop and keep going.
end
% If you get here, it worked.
fprintf('Just opened :\n%s\n', hurricaneName)

Categories

Find more on Tables in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!