matlab中直到循环语句,Matlab再次执行循环,直到第一条语句结束
想一想寫入文件的過程:它會按順序(通常)將字節從內存復制到存儲介質。你要求的是做以下事情(我假設第一個fprintf在隨后的調用中寫aaa,bbb,ccc,第二個寫AAA,BBB,CCC)。
aaaAAA - after first pass
aaabbbAAABBB - after second pass
aaabbbcccAAABBBCCC - after third pass
現在,如果你知道總的第一條語句的全部著作究竟有多長會,您可以:你想要的文件的內容將在本系列的下一行每次迭代之后
使用 “隨機訪問” 的文件
這可能是OK “有時” 做
aaa AAA
aaabbb AAABBB
aaabbbcccAAABBBCCC
。不過,我認為在內存中創建這些塊會更有意義,并最終寫出它們。
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);
不是很理想,因為你的風險越來越多的字符串,可以是相當緩慢的(如果它讓你可以用sprintf,而不是fprintf做到這一點對于分配的空間來說太大了,整個字符串必須移動;隨著字符串變大,字符串逐漸變慢。如果知道字符串的大小,可以預先分配字符串,但這會增加很多復雜)。
真的 - 一系列for循環一次為一種類型的數據執行所有操作,這樣輸出按您想要的順序生成,并不是一個糟糕的計劃。
另一個解決方案 - 規避了一些內存分配問題:使用sprintf將值放入二維單元陣列中 - 當完成后,將單元陣列的轉置打印到文件中。
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號到單元陣列,在最終輸出它們的分組如你所想。并且通過像我為單元格數組一樣選擇索引的順序,將整個事物打印成單行(而不是第二組嵌套循環)。
總結
以上是生活随笔為你收集整理的matlab中直到循环语句,Matlab再次执行循环,直到第一条语句结束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ISO13485 相关
- 下一篇: Python读写Excel文件第三方库汇