How to store fprintf statements into a txt file?

6 次查看(过去 30 天)
Hello everyone,
I am trying to write an XML file that I can upload into ANSYS for a model I am trying to simulate. I am using fprintf statements to format the ouput, such that it maps out like an XML file. But, I wanna test what I am doing by outputing it into a .txt file; to see what it looks like. Also, I have been trying to use the writetable function, but maybe that is what is giving me an issue. If anyone can please help me it would be much appreciated, thanks.
Note: tt and ff are to make the values in my row matrix have commas in between each value. Also, I want to have the values in tt immediately follow the statement in the last fprintf statement, so it looks like the following:
<Data format="float">0,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01,0.011,0.012,0.013....
clc, clear, close all
time = 0:0.001:9; x=time;
force = 1000*sin(x);
for i=1:numel(x)
if x(i) <= pi
force(i) = 1000*sin(x(i));
elseif (x(i) > pi)
force(i) = 0;
end
end
plot(x,force)
axis([0 5 0 1000])
title('Force v Time');xlabel('Time, measured in sec');ylabel('Force, measured in N')
Time = time';
tt = regexprep(num2str(time),'\s+',',');
Force = force';
ff = regexprep(num2str(force),'\s+',',');
Text = [fprintf('<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n');
fprintf('<ANSYS_EnggData>\n');
fprintf(' <MaterialData/>\n');
fprintf(' <ConvectionData/>\n');
fprintf(' <LoadVariationData>\n');
fprintf(' <MatML_Doc>\n');
fprintf(' <LoadVariation>\n');
fprintf(' <BulkDetails>\n');
fprintf(' <Name>Force</Name>\n');
fprintf(' <Form>\n');
fprintf(' <Description></Description>\n');
fprintf(' </Form>\n');
fprintf(' <PropertyData property="pr1">\n');
fprintf(' <Data format="float">',tt);]
writetable(Text,'Test.txt')
winopen('Test.txt')
  2 个评论
dpb
dpb 2019-3-25
I've never written/specifically read an XML file in my life but look at
doc xmlwrite % and friends
Looks like TMW has built some tools for the purpose...
dpb
dpb 2019-3-25
If the above doesn't prove to be of real benefit, it's not difficult to write--just write the stuff you want directly to the file; you don't need to go thru writetable or any other intermediaries...
For the specific question, it would be simply
<Data format="float">0,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01,0.011,0.012,0.013....

请先登录,再进行评论。

采纳的回答

Guillaume
Guillaume 2019-3-25
  • You can pass a file identifier to fprintf (after you've opened the file), e.g.:
fid = fopen('Test.txt', 'wt');
fprintf(fid, 'Some text');
%...
fclose(fid);
  • You seem to be confusing fprintf with sprintf. The return value fprintf is the number of character written. So, at the end your Text variable is just an array of numbers: the number of characters you passed to each fprintf call. sprintf on the other hand, returns a char array. However, here you'd be better off just calling strjoin:
Text = strjoin(...
'<?xml version="1.0" encoding="UTF-8" standalone="no" ?>', ...
'<ANSYS_EnggData>', ...
...,
'\n'); %join all char vectors with newlines
  • writetable requires a table as the first input. A char array is not a table. Since writetable is a class member, most likely matlab will tell you the function does not exist a
  • s it is only in scope when one of the arguments is a table
In any case, rather than attempting to write your xml (with all the potential bugs that it entails), you should be using xmlwrite which is guaranteed to generate valid xml:
doc = com.mathworks.xml.XMLUtils.createDocument('ANSYS_EnggData');
root = doc.getDocumentElement;
root.appendChild(doc.createElement('MaterialData'));
root.appendChild(doc.createElement('ConvectionData'));
loadvardata = root.appendChild(doc.createElement('LoadVariationData'));
matml = loadvardata.appendChild(doc.createElement('MatML_Doc'));
loadvar = matml.appendChild(doc.createElement('LoadVariation'));
bulkdetail = loadvar.appendChild(doc.createElement('BulkDetails'));
name = bulkdetail.appendChild(doc.createElement('Name'));
name.appendChild(doc.createTextNode('Force'));
form = bulkdetail.appendChild(doc.createElement('Form'));
form.appendChild(doc.createElement('Description'));
pdata = doc.createElement('PropertyData');
pdata.setAttribute('property', 'pr1');
data = doc.createElement('Data');
data.setAttribute('format', 'float');
data.appendChild(doc.createTextNode(num2str(3.14)));
pdata.appendChild(data);
form.appendChild(pdata);
xmlwrite('Test.xml', root);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Get Started with MuPAD 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by