Combine strings and doubles and export to .txt
2 views (last 30 days)
Show older comments
Tobias Bramminge
on 8 Oct 2019
Commented: Tobias Bramminge
on 8 Oct 2019
I need to make a .txt file on the format as shown below.
_____________________________________________________________
Node coordinates and Elements
Coordinates
1.0000 50.0000 20.5000 20.0000
2.0000 50.0000 20.5000 -20.0000
3.0000 50.0000 20.5000 6.6667
4.0000 50.0000 20.5000 -6.6667
5.0000 -50.0000 20.5000 -20.0000
6.0000 37.5000 20.5000 -20.0000
7.0000 25.0000 20.5000 -20.0000
8.0000 12.5000 20.5000 -20.0000
9.0000 0 20.5000 -20.0000
10.0000 -12.5000 20.5000 -20.0000
End Coordinates
Elements
1 27 32 33
2 27 26 32
3 24 29 30
4 24 23 29
5 37 36 34
6 37 3 36
7 39 35 14
8 39 29 35
End Elements
_______________________________________________________________________________
I've made following strings and doubles to assemble as above.
Header = 'Node coordinates and Elements';
Nstart = 'Coordinates\n';
Nend = 'End Coordinates\n';
Space = ' \n';
Estart = 'Elements\n ';
Eend = 'End Elements';
A = [1,50,20.5000000000000,20;2,50,20.5000000000000,-20;3,50,20.5000000000000,6.66666666666670;4,50,20.5000000000000,-6.66666666666670;5,-50,20.5000000000000,-20;6,37.5000000000000,20.5000000000000,-20;7,25,20.5000000000000,-20;8,12.5000000000000,20.5000000000000,-20;9,0,20.5000000000000,-20;10,-12.5000000000000,20.5000000000000,-20]
B = [1,27,32,33;2,27,26,32;3,24,29,30;4,24,23,29;5,37,36,34;6,37,3,36;7,39,35,14;8,39,29,35]
I tried fprint or dlmwrite, but only either the string or the doubles work. I've also tried converting the doubles to string, but unsuccessfully.
3 Comments
Accepted Answer
Stephen23
on 8 Oct 2019
Edited: Stephen23
on 8 Oct 2019
You can do this quite easily without any loops:
C1 = {'Node coordinates and Elements','Coordinates'};
C2 = {'End Coordinates','','Elements'};
C3 = {'End Elements'};
A = [1,50,20.5000000000000,20;2,50,20.5000000000000,-20;3,50,20.5000000000000,6.66666666666670;4,50,20.5000000000000,-6.66666666666670;5,-50,20.5000000000000,-20;6,37.5000000000000,20.5000000000000,-20;7,25,20.5000000000000,-20;8,12.5000000000000,20.5000000000000,-20;9,0,20.5000000000000,-20;10,-12.5000000000000,20.5000000000000,-20]
B = [1,27,32,33;2,27,26,32;3,24,29,30;4,24,23,29;5,37,36,34;6,37,3,36;7,39,35,14;8,39,29,35]
% Define matrix formats:
fmtA = [repmat(' %9.4f',1,size(A,2)),'\n'];
fmtB = [repmat(' %5d',1,size(B,2)),'\n'];
% Export data to file:
[fid,msg] = fopen('temp2.txt','wt');
assert(fid>=3,msg)
fprintf(fid,'%s\n',C1{:})
fprintf(fid,fmtA,A.')
fprintf(fid,'%s\n',C2{:})
fprintf(fid,fmtB,B.')
fprintf(fid,'%s\n',C3{:})
fclose(fid);
Giving (also attached as a file):
Node coordinates and Elements
Coordinates
1.0000 50.0000 20.5000 20.0000
2.0000 50.0000 20.5000 -20.0000
3.0000 50.0000 20.5000 6.6667
4.0000 50.0000 20.5000 -6.6667
5.0000 -50.0000 20.5000 -20.0000
6.0000 37.5000 20.5000 -20.0000
7.0000 25.0000 20.5000 -20.0000
8.0000 12.5000 20.5000 -20.0000
9.0000 0.0000 20.5000 -20.0000
10.0000 -12.5000 20.5000 -20.0000
End Coordinates
Elements
1 27 32 33
2 27 26 32
3 24 29 30
4 24 23 29
5 37 36 34
6 37 3 36
7 39 35 14
8 39 29 35
End Elements
Note that I followed the format of the example output text that you wrote in your answer, where you used multiple space characters as the delimiter. In your later comments you used horizontal tab characters as the delimiter, making your question and comments inconsistent.
I do not know of any sprintf format that prints four decimal places for all values except zero.
More Answers (0)
See Also
Categories
Find more on Characters and Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!