2013-10-15 7 views
3

Я пытаюсь написать текстовый файл, используя fprintf на matlab. Я использую цикл for:Написание текстового файла с fprintf на matlab

fID = fopen('fileName','w'); 
fSpec = cat(2,repmat('%s', 1, 3),'\n'); 
for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, fSpec, to_write); 
end 
fclose(fID); 

Файл написан, но только на одной строке. Я попытался открыть его с помощью gedit и matlab.

Что не так?

+0

Возможно, вам нужна линия возврата char? 'to_write = [num2str (k) ',' num2str (k * k), '\ r \ n'];'? – Dan

+0

нет. Я попробовал это. В документации к Matlab говорится, что для ее использования, если вы хотите открыть файл с помощью блокнота – bigTree

ответ

4

Ваш спецификатор формата несколько странно. to_write будет простой строкой, так почему вы строите fSpec как %s%s%s\n?

Если вы хотите одну строку на цикл, вы можете просто сделать:

for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, '%s\n', to_write); 
end 

EDIT:

В случае %s%s%s\n был разработан, чтобы соответствовать три строки в [num2str(k) ',' num2str(k*k)]: Это не является необходимым. Результат [num2str(k) ',' num2str(k*k)] будет просто одной строкой - вам нужен только один спецификатор формата '%s', а не три.

+0

Спасибо за объяснение. Я не знал, что вся строка может рассматриваться как строка – bigTree

+0

Я упускал из виду тот факт, что строка должна быть напечатана в файл, так или иначе я думал, что это должно быть целое число. +1 за предоставление ответа! – Fraukje

+0

Это правильный ответ на вопрос, но я считаю, что стоит обратить внимание на то, что The Right Way ™ для этого нужно заменить две строки в цикле одной строкой 'fprintf (fID, '% d,% d \ n ', k, k * k); '. –

0

Я смог найти две вещи в вашем коде.

Во-первых, вы хотите нанести ответный удар после записи каждой строки, таким образом, \n. Во-вторых, вы пытались написать строковое значение, используя fprint, так как вы использовали %s, сменив его на %d, решил это, я думаю!

Так обновленный код следует читать:

fID = fopen('fileName','w'); 
fSpec = cat(2,repmat('%d', 1, 3),'\n'); 
for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, fSpec, to_write); 
end 

fclose(fID); 
+0

, он действительно работает! Единственное различие между вашим кодом и моим заключается в том, что вы заменили% s на% d. почему это работает? Разве это не спецификатор для строк? – bigTree

+1

Это не имеет смысла. Использование '% d' будет записывать каждый символ в' to_write' в качестве его целочисленного значения. Который конечно не намерен ... – sebastian

Смежные вопросы