Comma separated data with text using dlmwrite

1 回表示 (過去 30 日間)
Sausan Khomusi
Sausan Khomusi 2013 年 8 月 4 日
Hello,
I am trying to achieve this string in a .txt file.
SPCD,1,1,3,1.9628e-05
and not this S,P,C,D,1,1,3,1,.,9,6,2,8,e,-,0,5
I have the following data in MATLAB:
n=12;
node_num=linspace(1,n,n)';
A = [1.96276396551253e-05,NaN,1.96298099346691e-05,1.96279640136501e-05;1.96276396551253e-05,NaN,1.96298099346691e-05,1.96279640136501e-05;1.96276396551253e-05,NaN,1.96298099346691e-05,1.96279640136501e-05;]
SPC = reshape(A,n,1);
for j = 1:n
R = {char('SPCD'), num2str(1), num2str(j), num2str(3), num2str(SPC(j))};
dlmwrite('try2.txt', R,'precision', '%.10f','newline', 'pc','-append');
end
I hope this makes sense and you can help. Thank you in advance. Sausan

採用された回答

Cedric
Cedric 2013 年 8 月 4 日
編集済み: Cedric 2013 年 8 月 4 日
Try with the following instead of DLMWRITE.
fid = fopen('try3.txt', 'w') ; % Opens file for writing.
for j = 1:n
fprintf(fid, 'SPCD,1,%d,3,%.10f\r\n', j, SPC(j)) ;
end
fclose(fid) ; % Closes file.
There is an issue with DLMWRITE which wants to "convert to matrix" its data argument. This is, in your case, what creates this array of comma-separated characters. Also, calling an I/O function which opens/closes a file from within a loop is not efficient; a better solution would be to call it once only with a cell array that contains all the data, which you cannot do because of the issue that I just mentioned.
Note that the format that you are using in the example is not the format (%.10f) specified in the call to DLMWRITE, so you might want to update the call to FPRINTF using a format like %.4e for example.

その他の回答 (1 件)

Sausan Khomusi
Sausan Khomusi 2013 年 8 月 4 日
Thank you very much. This worked perfectly.
  5 件のコメント
Sausan Khomusi
Sausan Khomusi 2013 年 8 月 4 日
Thank you for the fprintf details. I was getting hung up with where the specifiers needed to be, to be applied to the variable.
Your explanation of the formatSpec that you defined helped sort out my thoughts.
If I could pester you still. Once I have reshaped a matrix to a single array, how can I reduce the single array to every 10th value to be in the initial loop.
Cedric
Cedric 2013 年 8 月 4 日
編集済み: Cedric 2013 年 8 月 4 日
If I understand well your question, here is an example taking every 6th element:
>> values = 101:120 % Fake data, to illustrate.
values =
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
>> ix = 1:6:length(values) % Indices of relevant elements.
ix =
1 7 13 19
>> values_subset = values(ix)
values_subset =
101 107 113 119
Which you will probably write in a more condensed way once you understand:
>> values_subset = values(1:6:end) ;

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeText Files についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by