2013-01-21 96 views
3

我想編寫數組cloud,它與存儲具有經度和緯度兩列的圓形雲的座標的數組無關。我希望這些座標以這種方式寫在文本文件上。寫入文件錯誤:「打開的文件太多」

418.9517 43.9866 
419.2260 44.1501 
419.4826 44.3402 
419.7190 44.5550 
419.9327 44.7923 
420.1217 45.0497 

有了這個代碼,我想生成多個沒有這樣的文件存儲單個雲的座標在一個文件中。

這裏a是前兩列經緯度(圓心)和第三個圓的半徑的數組。和z =size(a)。(這是2905x3)。這樣總共可以寫入2905個文件。

for s =1:z(1) 
    r= a(s,3); 

    ang=0:0.1:2*pi; 
    xp=a(s,1) + r*cos(ang); 
    yp=a(s,2) + r*sin(ang); 
    xp=xp'; 
    yp= yp'; 
    cloud = [xp,yp] 

    filename = ['Shower_Cloud',s,'number.txt'] 
    file_id = fopen (filename,'w'); 
    fprintf(file_id,'%g\t',cloud[]); 
    fclose(file_id); 
end 

的錯誤,當我運行代碼的主要問題是我不能在我自己的診斷這個問題,儘管我有一種感覺它的一個小之一。

 >> xyz 
    D:\Users\Vikram\Documents\MATLAB\Manuela\Version_2\Weather\Shower\xyz.m: 
    Too many files open; check that FILES = 20 in 
    your CONFIG.SYS file. 

    Unexpected error status flag encountered. Resetting to proper state. 

請問我是否錯過了一些重要的提及。

+0

嘗試在'fprintf'命令中刪除'cloud'之後的'[]'... –

+0

@EitanT - 仍然是同樣的錯誤。 – Vikram

+0

你的操作系統是什麼? – HebeleHododo

回答

4

這只是一個猜測,但當連接數字和字符串時,可能會出現奇怪的行爲。 您可能需要使用num2str(s)來創建文件名。

+0

是的..現在它工作得很好。非常感謝。 – Vikram

0

也許程序的其他部分會丟失跟蹤打開的文件。使用fopen('all')列出打開文件的文件句柄。這也許是尋找bug的起點。

+1

這是怎麼回事,如果他在同一次迭代中關閉每個打開的文件? –

0

最有可能的是,在您的代碼中的某個點的一些錯誤導致許多文件被打開而沒有關閉。請注意,即使您發佈的代碼確實關閉了每個文件,但如果您仍在運行相同的MATLAB會話,您可能仍會打開文件。

您可以關閉,像這樣當前打開的所有文件:

fclose all 

所以我建議你鍵入到MATLAB提示第一。如果您仍然有錯誤,在看看:

fopen all 

列出當前打開的所有文件;希望這會給你足夠的信息來找到問題。

相關問題