matlab中直到循环语句,Matlab再次执行循环,直到第一条语句结束
想一想寫入文件的過(guò)程:它會(huì)按順序(通常)將字節(jié)從內(nèi)存復(fù)制到存儲(chǔ)介質(zhì)。你要求的是做以下事情(我假設(shè)第一個(gè)fprintf在隨后的調(diào)用中寫aaa,bbb,ccc,第二個(gè)寫AAA,BBB,CCC)。
aaaAAA - after first pass
aaabbbAAABBB - after second pass
aaabbbcccAAABBBCCC - after third pass
現(xiàn)在,如果你知道總的第一條語(yǔ)句的全部著作究竟有多長(zhǎng)會(huì),您可以:你想要的文件的內(nèi)容將在本系列的下一行每次迭代之后
使用 “隨機(jī)訪問(wèn)” 的文件
這可能是OK “有時(shí)” 做
aaa AAA
aaabbb AAABBB
aaabbbcccAAABBBCCC
。不過(guò),我認(rèn)為在內(nèi)存中創(chuàng)建這些塊會(huì)更有意義,并最終寫出它們。
s1 = '';
s2 = '';
for ii=1:5
s1 = [s1 sprintf('format etc', data, data)];
s2 = [s2 sprintf('other format', otherData)];
end
最后你寫他們依次是::
fprintf(fileID, '%s%s', s1, s2);
不是很理想,因?yàn)槟愕娘L(fēng)險(xiǎn)越來(lái)越多的字符串,可以是相當(dāng)緩慢的(如果它讓你可以用sprintf,而不是fprintf做到這一點(diǎn)對(duì)于分配的空間來(lái)說(shuō)太大了,整個(gè)字符串必須移動(dòng);隨著字符串變大,字符串逐漸變慢。如果知道字符串的大小,可以預(yù)先分配字符串,但這會(huì)增加很多復(fù)雜)。
真的 - 一系列for循環(huán)一次為一種類型的數(shù)據(jù)執(zhí)行所有操作,這樣輸出按您想要的順序生成,并不是一個(gè)糟糕的計(jì)劃。
另一個(gè)解決方案 - 規(guī)避了一些內(nèi)存分配問(wèn)題:使用sprintf將值放入二維單元陣列中 - 當(dāng)完成后,將單元陣列的轉(zhuǎn)置打印到文件中。
storage = cell(3,2);
for ii=1:3
storage{ii,1}=sprintf('%d \n',ii);
storage{ii,2}=sprintf('%.2f\n', ii);
end
% now write the resulting strings in the order you want them:
for ii = 1:2
for jj = 1:3
fprintf(1, '%s', storage{jj,ii});
end
end
% but you don't even need these loops:
fprintf(1, 'and now all at once:...\n');
fprintf(1, '%s', [storage{:}])
這樣做的輸出就是你要找的人:
1
2
3
1.00
2.00
3.00
and now all at once:...
1
2
3
1.00
2.00
3.00
正如你可以看到,我們雖然寫了備用%d和%.2f號(hào)到單元陣列,在最終輸出它們的分組如你所想。并且通過(guò)像我為單元格數(shù)組一樣選擇索引的順序,將整個(gè)事物打印成單行(而不是第二組嵌套循環(huán))。
總結(jié)
以上是生活随笔為你收集整理的matlab中直到循环语句,Matlab再次执行循环,直到第一条语句结束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ISO13485 相关
- 下一篇: Python读写Excel文件第三方库汇