fprintf formatting problem with cell and array matrix

조회 수: 4 (최근 30일)
Brantosaurus
Brantosaurus 2023년 10월 19일
댓글: Brantosaurus 2023년 10월 19일
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
Walter Roberson
Walter Roberson 2023년 10월 19일
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');

댓글을 달려면 로그인하십시오.

채택된 답변

Star Strider
Star Strider 2023년 10월 19일
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
Brantosaurus
Brantosaurus 2023년 10월 19일
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 :)

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2023년 10월 19일
이동: Walter Roberson 2023년 10월 19일
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 2023년 10월 19일
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);

카테고리

Help CenterFile Exchange에서 Data Types에 대해 자세히 알아보기

제품


릴리스

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by