Code failure on recent version of MATLAB
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Thomas Bateman-Price
le 28 Jan 2020
Réponse apportée : Guillaume
le 28 Jan 2020
Hello, I wondered if anyone could help me with a piece of code that works perfectly well on MATLAB 2017, but when updating to R2019a, it fails. The particular region where it breaks down is:
formatSpec = '%f%[^\n\r]';
fileID = fopen(filename,'r');
delimiter = {''};
startRow = 2;
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
fclose(fileID);
Retured error states problem with textscan ("Invalid file identifier. Use fopen to generate a valid file identifier"), despite the code working in earlier version.
For background, the script will import a text file (almost always .csv) with arbitrary fluorescent values associated with frequency points, followed by formatting, removal of values if required and plotting etc.
Hope that's enough info and thank you :)
1 commentaire
Réponse acceptée
Guillaume
le 28 Jan 2020
So, it sounds like filename is a relative path or a just a filename. Either way, it relies on the file being in the current folder, or in a folder on matlab's path. The reason it would be working in one matlab installation and not another is probably simply that the file folder has been added to matlab's path on one system (with addpath) and not on the other, or maybe the current directory is different.
One way to solve the problem would be to add the required folder to matlab's path. I wouldn't recommend that. Folders on matlab path should be code folders not data folder. For data, it is much safer to use absolute paths which means that the data can reside anywhere without having to change a thing. We don't know how filename is constructed, if it's an input you pass the function:
folderwherethefileis = 'C:\somewhere\somefolder'; %make sure that it is absolute. On windows, it means it starts with a drive letter
filename = fullfile(folderwherethefileis, 'somefilename.csv');
%... you now have a absolute path to the file. fopen will succeed unless the path is wrong or you don't have permission
fileID = fopen(filename,'r');
While we're at it, I suggest you modify that fopen line, to check that it succeeds and if not tells you why.
[fileID, errmsg] = fopen(filename,'r');
assert(fileID > 0, 'Failed to open %s. The error is: %s', filename, errmsg);
0 commentaires
Plus de réponses (1)
Stephen23
le 28 Jan 2020
Modifié(e) : Stephen23
le 28 Jan 2020
An empty permission string is not supported by the documentation:
fopen(filename,'');
% ^^ Not supported by the FOPEN documentation.
I doubt that it was ever supported. You should use a permission string that follows the documentation.
3 commentaires
Guillaume
le 28 Jan 2020
Please do answer my question. In particular, if filename is a relative path, is the folder where the data is located the current folder or a folder that is supposed to be on matlab's path?
Voir également
Catégories
En savoir plus sur Environment and Settings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!