Allowing for code to work different with file names

2 ビュー (過去 30 日間)
Aaron Smith
Aaron Smith 2017 年 5 月 25 日
編集済み: Stephen23 2017 年 7 月 5 日
I have a code that works fine but i have thus far only used it with a single test file. As a result of this i could run it while specifying the filename as well as the folder inside the code itself:
f1d = fopen(fullfile(sbd,'TEST_A.asc'),'rt');
Now that i need to apply it to multiple different files the code will not work. I have tried including a colon to read all files (as there is only one) but this doesn't work as the matlab error says there is no file name given. Can I not just specify the folder from which to select the file and the code read whatever files are in the folder?

採用された回答

Image Analyst
Image Analyst 2017 年 5 月 25 日
Aaron, if you just want the user to pick some file instead of using dir() or sprintf() to build/get the filename, do this:
% Have user browse for a file, from a specified "starting folder."
% For convenience in browsing, set a starting folder from which to browse.
startingFolder = 'C:\Program Files\MATLAB'; % Whatever you want.....
if ~exist(startingFolder, 'dir')
% If that folder doesn't exist, just start in the current folder.
startingFolder = pwd;
end
% Get the name of the file that the user wants to use.
defaultFileName = fullfile(startingFolder, '*.*');
[baseFileName, folder] = uigetfile(defaultFileName, 'Select a file');
if baseFileName == 0
% User clicked the Cancel button.
return;
end
fullFileName = fullfile(folder, baseFileName)
  10 件のコメント
Jan
Jan 2017 年 5 月 26 日
This line removed the entries '.' and '..' from the output of the dir() command. In your case they will not appear, because aou are searching for '*.asc'. But if you re-use the code snippets in other programs, this might be useful:
FileList = dir(fullfile(cd, '*.'));
fprintf('%s\n', FileList.name)
Then you see the '.' and '..', which are current folder and parent folder.
There is no general meaning of "status, msg". For the fopen and mkdir command, the first output is a flag to reply the success status and msg contains an error message in case of problem, such that the user do not have to guess, what the problem is. See:
doc fopen
doc mkdir
Aaron Smith
Aaron Smith 2017 年 5 月 26 日
Thanks a million :)

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2017 年 5 月 25 日
編集済み: Stephen23 2017 年 5 月 25 日
How to read multiple files is explained extensively in the documentation, on this forum, and in the wiki:
etc
The first thing to decide is if you want to generate the file names, or if you want to read the names of existing files:
  • generate names: use sprintf and fullfile.
  • read names: use dir and fullfile.
You can find some examples with my FEX submission natsortfiles:
  2 件のコメント
Aaron Smith
Aaron Smith 2017 年 5 月 25 日
編集済み: Aaron Smith 2017 年 5 月 25 日
Thanks Stephen. I am only processing a single file but i could use the code for importing multiple but is there no simpler way to simply select the folder and then matlab processes the file that is inside?. I am trying to read the file that exists inside the folder, not generate a file name
Stephen23
Stephen23 2017 年 6 月 14 日
編集済み: Stephen23 2017 年 7 月 5 日
@Aaron Smith: and if you read my answer you will see that I covered that too:
"read names: use dir and fullfile."

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeStartup and Shutdown についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by