MATLAB - загрузить файл, имя файла которого хранится в строке - PullRequest
9 голосов
/ 21 февраля 2010

Я использую MATLAB для обработки данных из файлов. Я пишу программу, которая принимает данные от пользователя, а затем находит конкретные файлы в каталоге, отображая их. Файлы называются:

{имя} U {скорость}

{name} - это строка, представляющая имя компьютера. {скорость} это число. Вот мой код:

%# get user to input name and rate
NET_NAME = input('Enter the NET_NAME of the files: ', 's');
rate = input('Enter the rate of the files: ');

U = strcat(NET_NAME, 'U', rate)
load U;

Ux = U(:,1);
Uy = U(:,2);

В настоящее время есть две проблемы:

  1. Когда я произнесу strcat с произнесением 'hello', 'U' и rate = 50, U будет хранить helloU2 - как мне заставить strcat правильно добавить {rate}?

  2. Строка загрузки - как разыменовать U, чтобы load пыталась загрузить строку, хранящуюся в U?

Большое спасибо!

Ответы [ 2 ]

8 голосов
/ 21 февраля 2010

Комментарий Михаила выше решает вашу непосредственную проблему.

Более удобный способ выбора файла:

[fileName,filePath] = uigetfile('*', 'Select data file', '.');
if filePath==0, error('None selected!'); end
U = load( fullfile(filePath,fileName) );
3 голосов
/ 21 февраля 2010

Помимо использования SPRINTF , как предложил Михаил, вы также можете комбинировать строки и числовые значения, сначала преобразовав числовые значения в строки, используя такие функции, как NUM2STR и INT2STR

U = [NET_NAME 'U' int2str(rate)];
data = load(U);  %# Loads a .mat file with the name in U

Одна проблема со строкой в ​​U состоит в том, что файл должен находиться по пути MATLAB или в текущем каталоге. В противном случае переменная NET_NAME должна содержать полный или частичный путь, например:

NET_NAME = 'C:\My Documents\MATLAB\name';  %# A complete path
NET_NAME = 'data\name';  %# data is a folder in the current directory

Предложение Амро об использовании UIGETFILE идеально подходит, поскольку помогает вам обеспечить полный и правильный путь к файлу.

...