fprintf formatting problem with cell and array matrix

6 views (last 30 days)
I would very much appreciate if somone could kindly show me how to finnish off what appears to be a simple formatting problem. Nearly there, but the last step has beaten me!
'ref' is what i want and 'ofmf' is the 'script' output.
Just a question of placing the 'mix ratio' character string immediately above the first data column and pushing the cell array one column to the right above the matrix. The number of columns and rows are unknown.
(Apologies for the messy data input!)
  1 Comment
Walter Roberson
Walter Roberson on 19 Oct 2023
dbtype script
1 clear, clc, close all 2 %% input data 3 4 frac2d = ... 5 [1.080799513888714E-32 0 0.62466759170135333 0.0742119108820972 0 0 0 ... 6 0 0 0.30112049741654717; 7 8.1862156579892249E-31 0 0.43700138755203366 0.56299861244797844 0 0 ... 8 0 0 0 0; 9 4.8637114770698571E-21 0 0.32440166506243995 0.67559833493756316 0 0 ... 10 4.2291497653345257E-26 0 0 0; 11 1.6450880329246443E-15 3.1789404533678006E-36 0.24933518340270872 0.7506648165972899 ... 12 3.0673853913761709E-28 1.3223645939372742E-32 8.0871899392903947E-19 ... 13 6.70013387010215E-33 0 0; 14 4.900395718623101E-12 6.1747782151010521E-28 0.19571626793147767 0.80428373206852888 ... 15 2.2269718209845535E-22 1.6572230040113729E-24 3.3433984090423735E-14 ... 16 9.2977078152200557E-25 0 0; 17 1.0257351304705146E-9 2.617799763018077E-22 0.15550208132805002 0.84449791867194646 ... 18 2.1781579716418966E-18 4.9208050395830782E-19 4.3857807128809733E-11 ... 19 3.2214171097127513E-19 0 0; 20 4.3103181910295979E-8 2.7279345388281687E-18 0.12422433753331349 0.87577561936350534 ... 21 1.570342966673278E-15 3.78000038794537E-15 7.1379146386309683E-9 2.9689871616039746E-15 ... 22 3.5360248709238178E-32 0; 23 6.5459411463843508E-7 2.7320582329382315E-15 0.099201583893637285 0.9007974509664014 ... 24 2.1726807488669134E-13 2.8836393026009774E-12 3.1054584734036675E-7 ... 25 2.7651925411612618E-12 7.12366402656099E-27 0; 26 5.0662163511599685E-6 5.883213268176446E-13 0.078724813502676808 0.92126444320230738 ... 27 1.0153013026281985E-11 4.8262185118338723E-10 5.6770786659506609E-6 ... 28 5.7354594102813562E-10 9.7023674645676979E-23 0; 29 2.4421990262674956E-5 4.403704051947919E-11 0.06164794655733434 0.93827052251646137 ... 30 2.2445716907411361E-10 2.8377451585746555E-8 5.7038008629661728E-5 4.25498603104255E-8 ... 31 2.0811584806073058E-19 0; 32 8.2187030635818051E-5 1.5288924079026876E-9 0.047173110175765094 0.95237302382510747 ... 33 2.8721600227496867E-9 7.7581284460813075E-7 0.00036939736170548689 1.5057939350703259E-6 ... 34 1.1726859150654507E-16 0; 35 0.00020427712746989916 2.9105403726253816E-8 0.034760508512691225 0.96330610874190448 ... 36 2.3876219545799965E-8 1.1566323656074547E-5 0.0016873015383648579 3.0208650517165084E-5 ... 37 2.3443091248967122E-14 0; 38 0.00038077633599091645 3.3138117176928766E-7 0.024151961677904805 0.96931004937101217 ... 39 1.3649589247496569E-7 0.00010177468680586972 0.0056759924892255493 0.00037897756200643907 ... 40 1.9511337609553526E-12 0; 41 0.00052407082677757269 2.2742164116491102E-6 0.015511740358074975 0.96632796330430382 ... 42 5.3611083709640121E-7 0.00053118366049772158 0.014065446275684821 0.0030367852474231624 ... 43 6.887405688319738E-11 0; 44 0.00052856823076589509 8.658464587260697E-6 0.0093989841734753513 0.9495411058272516 ... 45 1.3577058415442342E-6 0.0015427398356310203 0.024754647508174875 0.014223938254272516 ... 46 8.8099805664011839E-10 0; 47 0.00042813835721212761 1.8749212329738908E-5 0.0057655124991027457 0.920591265384587 ... 48 2.269548855159085E-6 0.0026396910954343466 0.032128828877358365 0.038425545025119787 ... 49 4.149228770119087E-9 0; 50 0.00031494793492961137 2.8327147863117975E-5 0.0037057710019004955 0.88634406267706345 ... 51 2.922132902838032E-6 0.0032768974022960775 0.034775463743648316 0.071551607959386754 ... 52 1.018411787725647E-8 0; 53 0.00022348304331810186 3.5251522913437423E-5 0.0024786422606670384 0.85134668127933666 ... 54 3.2746278191248033E-6 0.00344139271559275 0.034292082662405188 0.10817919188794742 ... 55 1.7500625275918122E-8 0; 56 0.00015605925600176512 3.9341075649633064E-5 0.001702599392503859 0.8174699691665277 ... 57 3.3970252161274673E-6 0.0032942135941524892 0.032135291011034732 0.14519912947891617 ... 58 2.4579722439036182E-8 0; 59 0.0001078783250984206 4.1056317609275734E-5 0.0011891055667362491 0.78536474093557762 ... 60 3.3613947843293898E-6 0.0029771549758717086 0.029184848667306983 0.18113182333004763 ... 61 3.0486964237300663E-8 0; 62 7.392252463130788E-5 4.0959000051015282E-5 0.00083862229703092787 0.755195725277905 ... 63 3.2225776517101929E-6 0.0025861369476422578 0.025940842802949327 0.2153205337688972 ... 64 3.4803232955347635E-8 0; 65 5.0210295664953338E-5 3.9555945293785451E-5 0.0005944585106563569 0.7269340589384562 ... 66 3.01982398381767E-6 0.0021806906182302303 0.022687255264208894 0.24751071315297202 ... 67 3.7450541969004565E-8 0]; 68 69 of = [0.5; 1; 1.5; 2; 2.5; 3; 3.5; 4; 4.5; 5; 5.5; 6; 6.5; 7; 7.5; 8; 8.5; ... 70 9; 9.5; 10; 10.5; 11]; 71 72 prodNames = cell(1, 10); 73 prodNames{1} = '*H'; 74 prodNames{2} = 'HO2'; 75 prodNames{3} = '*H2'; 76 prodNames{4} = 'H2O'; 77 prodNames{5} = 'H2O2'; 78 prodNames{6} = '*O'; 79 prodNames{7} = '*OH'; 80 prodNames{8} = '*O2'; 81 prodNames{9} = 'O3'; 82 prodNames{10} = 'H2O(S)'; 83 84 %% print 85 86 prodNums = length(prodNames); 87 88 fileID = fopen('ofmf.txt','w'); 89 fprintf(fileID,' Mix ratio\n'); 90 fmt1 = [repmat('%15s ', 1, prodNums-1), '%15s\n']; 91 fprintf(fileID,fmt1,prodNames{:}); 92 fmt2 = [repmat('%15.7e ', 1, prodNums), '%15.7e\n']; 93 fprintf(fileID,fmt2,[of,frac2d].'); 94 fprintf(fileID,' **************\n'); 95 96 fclose('all');

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 19 Oct 2023
Eliminiating the newline character from the ‘Mix ratio’ fprintf statement:
fprintf(fileID,' Mix ratio');
produces:
Mix ratio *H HO2 *H2 H2O H2O2 *O *OH *O2 O3 H2O(S)
5.0000000e-01 1.0807995e-32 0.0000000e+00 6.2466759e-01 7.4211911e-02 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 3.0112050e-01
1.0000000e+00 8.1862157e-31 0.0000000e+00 4.3700139e-01 5.6299861e-01 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00
1.5000000e+00 4.8637115e-21 0.0000000e+00 3.2440167e-01 6.7559833e-01 0.0000000e+00 0.0000000e+00 4.2291498e-26 0.0000000e+00 0.0000000e+00 0.0000000e+00
2.0000000e+00 1.6450880e-15 3.1789405e-36 2.4933518e-01 7.5066482e-01 3.0673854e-28 1.3223646e-32 8.0871899e-19 6.7001339e-33 0.0000000e+00 0.0000000e+00
2.5000000e+00 4.9003957e-12 6.1747782e-28 1.9571627e-01 8.0428373e-01 2.2269718e-22 1.6572230e-24 3.3433984e-14 9.2977078e-25 0.0000000e+00 0.0000000e+00
3.0000000e+00 1.0257351e-09 2.6177998e-22 1.5550208e-01 8.4449792e-01 2.1781580e-18 4.9208050e-19 4.3857807e-11 3.2214171e-19 0.0000000e+00 0.0000000e+00
3.5000000e+00 4.3103182e-08 2.7279345e-18 1.2422434e-01 8.7577562e-01 1.5703430e-15 3.7800004e-15 7.1379146e-09 2.9689872e-15 3.5360249e-32 0.0000000e+00
4.0000000e+00 6.5459411e-07 2.7320582e-15 9.9201584e-02 9.0079745e-01 2.1726807e-13 2.8836393e-12 3.1054585e-07 2.7651925e-12 7.1236640e-27 0.0000000e+00
4.5000000e+00 5.0662164e-06 5.8832133e-13 7.8724814e-02 9.2126444e-01 1.0153013e-11 4.8262185e-10 5.6770787e-06 5.7354594e-10 9.7023675e-23 0.0000000e+00
5.0000000e+00 2.4421990e-05 4.4037041e-11 6.1647947e-02 9.3827052e-01 2.2445717e-10 2.8377452e-08 5.7038009e-05 4.2549860e-08 2.0811585e-19 0.0000000e+00
5.5000000e+00 8.2187031e-05 1.5288924e-09 4.7173110e-02 9.5237302e-01 2.8721600e-09 7.7581284e-07 3.6939736e-04 1.5057939e-06 1.1726859e-16 0.0000000e+00
6.0000000e+00 2.0427713e-04 2.9105404e-08 3.4760509e-02 9.6330611e-01 2.3876220e-08 1.1566324e-05 1.6873015e-03 3.0208651e-05 2.3443091e-14 0.0000000e+00
6.5000000e+00 3.8077634e-04 3.3138117e-07 2.4151962e-02 9.6931005e-01 1.3649589e-07 1.0177469e-04 5.6759925e-03 3.7897756e-04 1.9511338e-12 0.0000000e+00
7.0000000e+00 5.2407083e-04 2.2742164e-06 1.5511740e-02 9.6632796e-01 5.3611084e-07 5.3118366e-04 1.4065446e-02 3.0367852e-03 6.8874057e-11 0.0000000e+00
7.5000000e+00 5.2856823e-04 8.6584646e-06 9.3989842e-03 9.4954111e-01 1.3577058e-06 1.5427398e-03 2.4754648e-02 1.4223938e-02 8.8099806e-10 0.0000000e+00
8.0000000e+00 4.2813836e-04 1.8749212e-05 5.7655125e-03 9.2059127e-01 2.2695489e-06 2.6396911e-03 3.2128829e-02 3.8425545e-02 4.1492288e-09 0.0000000e+00
8.5000000e+00 3.1494793e-04 2.8327148e-05 3.7057710e-03 8.8634406e-01 2.9221329e-06 3.2768974e-03 3.4775464e-02 7.1551608e-02 1.0184118e-08 0.0000000e+00
9.0000000e+00 2.2348304e-04 3.5251523e-05 2.4786423e-03 8.5134668e-01 3.2746278e-06 3.4413927e-03 3.4292083e-02 1.0817919e-01 1.7500625e-08 0.0000000e+00
9.5000000e+00 1.5605926e-04 3.9341076e-05 1.7025994e-03 8.1746997e-01 3.3970252e-06 3.2942136e-03 3.2135291e-02 1.4519913e-01 2.4579722e-08 0.0000000e+00
1.0000000e+01 1.0787833e-04 4.1056318e-05 1.1891056e-03 7.8536474e-01 3.3613948e-06 2.9771550e-03 2.9184849e-02 1.8113182e-01 3.0486964e-08 0.0000000e+00
1.0500000e+01 7.3922525e-05 4.0959000e-05 8.3862230e-04 7.5519573e-01 3.2225777e-06 2.5861369e-03 2.5940843e-02 2.1532053e-01 3.4803233e-08 0.0000000e+00
1.1000000e+01 5.0210296e-05 3.9555945e-05 5.9445851e-04 7.2693406e-01 3.0198240e-06 2.1806906e-03 2.2687255e-02 2.4751071e-01 3.7450542e-08 0.0000000e+00
**************
Is that what you want?
Writing it to a table and then using writetable would be easier, however that would not work in R2017a, because only valid MATLAB variable names were allowed as variable names then. The ability to use variable names such as you want was introduced in R2020b (if I remember correctly).
.
  1 Comment
Brantosaurus
Brantosaurus on 19 Oct 2023
Jeepers, i missed that!!!
Just had a hunch it was possible with my outdated version.
This is the easiest solution to my problem and take note of your advice.
The other contributions are also much appreciated and will undoubtedly widen my understanding by different approaches. Thanks guys :)

Sign in to comment.

More Answers (2)

Walter Roberson
Walter Roberson on 19 Oct 2023
Moved: Walter Roberson on 19 Oct 2023
I would suggest that you use compose as it makes it easier to create rows of data. If you use a "" quoted string for the format instead of a '' quoted string then the output of compose() would be a string() array that you could then strjoin with newline and fwrite the result.

Voss
Voss on 19 Oct 2023
See the attached modified script and resulting .txt file.
The file-writing section is reproduced here:
prodNums = length(prodNames);
fileID = fopen('ofmf.txt','w');
fmt1 = [repmat('%15s ', 1, prodNums), '%15s\n'];
temp = [{'Mix ratio'} prodNames];
fprintf(fileID,fmt1,temp{:});
fmt2 = [repmat('%15.7e ', 1, prodNums), '%15.7e\n'];
fprintf(fileID,fmt2,[of,frac2d].');
fprintf(fileID,' **************\n');
fclose(fileID);

Products


Release

R2017a

Community Treasure Hunt

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

Start Hunting!