2012-04-19 5 views
0

Я совершенно новичок в программировании и понятия не имею, что я делаю. Я весь день застрял, пытаясь заставить команду sprintf работать. Если я правильно понимаю, мне нужно инициализировать файл, который я хочу, чтобы это написать, например, так:Почему мой sprintf не работает в Matlab?

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
fopen(recalltest, 'wt'); 
if recalltest == -1 
    error('Error opening log file'); 
end 

Затем определите переменную, которую я хочу записываться в файл:

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

И затем я пытаюсь написать эту переменную в мой лог-файл:

sprintf(recalltest, '%s,', recall1); 
fclose('all'); 

Существует куча вещей между каждым из них, но я надеюсь, это все соответствующие части. Файл журнала создается, но независимо от того, что я делаю, я ничего не могу получить. Что я делаю не так?

ответ

1

sprintf форматирует данные в строку; Я удивлен, что код работает вообще. Вы хотите получить fprintf для вывода в файл.

+0

Ничего не меняется, если вместо этого использовать fprintf. – nikipedia

1

Некоторые исправления для кода:

% проверенный код.

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
FileID = fopen(recalltest, 'wt'); 
if FileID == -1 
    error('Error opening log file'); 
end 

% проверенный код заканчивается.

% Здесь идет ваш вызов функции GetEchoString. Если этот код не работает, причина, вероятно, в этом вызове функции или в самой функции.

% не проверен код.

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

% проверено не проверено.

У вас было '%s,' в вашем звонке fprintf, который печатает , после строки recall1. Если это ваша цель, верните , на следующую строку кода. Но вы также можете добавить его в recall1, используя strcat перед печатью.

% проверено код.

fprintf(FileID, '%s', recall1); 
fclose(FileID); 

% проверено завершение кода.

Обычно вы можете использовать fprintf для всей печати, как для файлов, так и для экрана. Для печати в файл первый аргумент в fprintf вызов функции должен быть FileID, который обычно называется fid в документации MATLAB и в других местах. FileID или fid - это не имя файла, это всего лишь номер, возвращенный fopen, и действителен только между fopen и соответствующим fclose. Это не константа, связанная с конкретным файлом или файлом, поэтому вы должны сохранить возвращаемое значение fopen всегда, чтобы иметь возможность читать или записывать в файл.

sprintf ничего не печатает ни на каком экране, ни на каком-либо файле, он только форматирует данные в строку, как говорится в документации sprintf. sprintf выход (это первое возвращаемое значение, второе - err) можно распечатать на экране, используя disp.

+0

Спасибо, бит идентификатора файла решил. – nikipedia

0
recalltest = sprintf('DRMRecall_%d.log', subNo); % usage of sprintf to create a string 
fid = fopen(recalltest, 'wt'); 
assert(fid ~= -1, 'Error opening log file'); % save if... 
recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 
fprintf(fid, '%s\n', recall1); % usage of fprintf to write to a file 
fclose(fid); 
Смежные вопросы