2016-01-19 2 views
1

У меня есть 39x4 клетки:запись ячейки в текстовый файл

'ID' 'x' 'y' 'z' 
459  34 -49 -20 
464  36 -38 -22 
639  40 -47 -27 
719  35 -52 -20 
725  42 -45 -18 
727  46 -47 -26 
... 

Я хотел бы написать все это в текстовый файл. Я попытался следующие:

fileID = fopen('test2.txt','w'); 
formatSpec='%s %d %d %d'; 
fprintf(fileID,formatSpec,P{:}); 
fclose(fileID); 

Однако, если я делаю это, я получаю ошибку, что fprintf не определен для ввода «ячейки». Я видел несколько примеров, подобных этому, о том, как print a cell array as .txt in Matlab это о том, как write cell array of combined string and numerical input into text file, но они, похоже, не очень хорошо подходят без каких-либо неуклюжих модификаций.

Может кто-нибудь помочь?

ответ

0

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

Что-то, как это должно работать:

%// Open the file for writing 
fileID = fopen('test2.txt','w'); 

%// First write the headers to file 
fprintf(fileID, '%s %s %s %s\n', P{1,:}); 

%// Transpose because writing is done in column-major order 
Pt = P.'; %' 

%// Now write each row to file 
fprintf(fileID, '%d %d %d %d\n', Pt{:,2:end}); 

%// Close the file 
fclose(fileID); 

Примите к сведению в спецификатора формата для первой строки состоит из полностью строк, то спецификатор формата для строк после того, как состоит только из целых чисел. Также обратите внимание, что мне нужно было транспонировать массив ячеек, потому что с помощью fprintf естественно записывает матрицы в порядке столбцов, поэтому для того, чтобы писать ваши матрицы в строчном порядке, транспонирование требуется перед печатью, и нам также понадобятся для доступа к столбцам ваших данных вместо строк для размещения.

+0

Спасибо, rayryeng. Линия, заботящаяся о заголовке, не работает. Когда я запускаю 'fprintf (fileID, '% s% s% s% s \ n', P {1,:});' Я все еще получаю ошибку, которая fprintf не определена для ввода соты. Я что-то упускаю? –

+0

@ A.Rainer Код работает для меня .... Я объявил 'P' как массив ячеек, как у вас в вашем коде. Я в замешательстве, почему вы получаете эту ошибку. – rayryeng

+0

Это также может быть ссылка на версию MATLAB, которую вы используете. Какую версию MATLAB вы используете? – rayryeng

0

ошибка, скорее всего, была вызвана из-за следующую строку в вашем коде:

fprintf(fileID,formatSpec,P{:}); % P{:} returns all the cells in P matrix 

Также formatSpec вы указали не будет работать для всех строк, так как первая строка в другом формате. Вам потребуются два вызова fprintf как:

fprintf(fileID,'%s %s %s %s\n',P{1,:}); 
fprintf(fileID,'%d %d %d %d\n',P{2:end,:}); 
+0

Помните, что 'fprintf' использует матрицы для доступа к элементам в порядке столбцов. Вам нужно будет перенести «P», затем перейти ко второму столбцу в последний столбец, чтобы правильно записать его в файл. – rayryeng

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