2013-05-09 2 views
0

У меня есть input.dat так:запись данных в выходной текстовый файл

1 1 1 2 3 10 17 16 15 8 9 
2 1 3 4 5 12 19 18 17 10 11 
3 1 5 6 7 4 21 20 19 12 13 
4 1 15 16 17 24 31 30 29 22 23 

первая колонка: numel
второй колонке: matno
третьего-12st столбцов: lnods

я написал следующим образом;

fprintf(FID6,'N PRO  POINTS \n'); 

MATNO=zeros(4,1); 
LNODS=zeros(4,9); 

for IELEM=1:NELEM 

NUMEL(IELEM,:)=fscanf(FID5, '%d', 1); 
MATNO(IELEM,:)=fscanf(FID5, '%d', 1); 
LNODS(IELEM,:)=fscanf(FID5, '%d %d %d %d %d %d %d %d %d',[9,1]); 

    end 

    fprintf(FID6, '%-2d   %-2d  %-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d %-  2d\n',NUMEL,MATNO,LNODS); 

Я ожидаю:

N PRO      POINTS 
1  1    1 2 3 10 17 16 15 8 9 
2  1    3 4 5 12 19 18 17 10 11 
3  1    5 6 7 4 21 20 19 12 13 
4  1    15 16 17 24 31 30 29 22 23 

но

N PRO      POINTS 
1  2    3 4 1 1 1 1 1 3 5 
15  2    4 6 16 ... 

чем проблема?

+0

Я этого не писал. NELEM = 9 – user2365201

ответ

0

Используйте вкладки вместо простых помещений. Гораздо чище.

Например:

fprintf(FID6, '%-2d\t%-2d\t%-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d\n',NUMEL,MATNO,LNODS); 

А также интервал, зачем ставить% -2d? попробуйте% 4d или что-то и удалить пробелы

fprintf(FID6,'%4d\t%4d\t%4d%4d%4d%4d%4d%4d%4d%4d%4d\n',NUMEL,MATNO,LNODS) 
+0

Спасибо, но я имею в виду, я хочу, чтобы NUMEL AND MATNO распечатывались в направлении столбца. – user2365201

+0

oh! Мне жаль, что я этого не заметил. Был ли отредактированный вывод актуальной проблемой или что-то пропало? –

+0

Извините, но я не могу понять ваш ответ. Я проверил этап отладки, размер NUMEL, MATNO и LNODS, и значение я ожидал. однако выходного текстового файла нет. Я не могу уловить проблему. – user2365201

0

Это обычно ловушкой при попытке использовать fprintf для записи матриц в файл. fprintf сериализует данные по столбцам, а не по строкам, как вы хотите.

Самое простое решение в вашем случае, чтобы добавить петлю for так же, как вы сделали с входом:

for k = 1:numel(NUMEL) 
    fprintf(FID6, '%-2d\t%-2d\t%-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d\n', NUMEL(k), MATNO(k), LNODS(k, :)); 
end 

В качестве альтернативы, вы можете создать одну большую матрицу из ваших значений и передать транспонированная к fprintf :

A = [NUMEL, MATNO, LNODS].'; %// Note the transpose operator .' 
fprintf(FID6, '%-2d\t%-2d\t%-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d %-2d\n', A); 

Обычно я предпочитаю последнее решение, потому что оно не содержит явных циклов.

+1

Я понял. Спасибо!! – user2365201

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