2016-12-05 44 views
-1

我在matlab中創建了單元格文件。(matlab)從單元格數據寫入csv文件

This is the cell the name is "Table". In this Table,{1,1} is name of city, {1,2}&{1,3} are longitude and latitude values. {1,4},{1,6},{1,8},{1,10} has the name(characters), and {1,5},{1,7},{1,9},{1,11} has the number with the range which is shown in the picture.

我想創建此表的csv文件。 起初我嘗試過「csvwrite」功能,但它在這種情況下不起作用。

此外,我還根據列創建文件。

for i=1:25 
County_value(i,1) = Table{1,1+(i-1)*11}; 
County_lon(i,1) = Table{1,2+(i-1)*11}; 
County_lat(i,1) = Table{1,3+(i-1)*11}; 

D_apt(:,1+2*(i-1)) = Table{1,4+(i-1)*11}; 
D_apt{:,2*i} = num2cell(Table{1,5+(i-1)*11}) 

end 

我成功縣值,LON lat和D_apt(:,1 + 2 *(I-1))。但是,當我嘗試創建D_apt {:,2 * i}時出現錯誤...

我需要您的幫助!

謝謝你,謝謝你的幫助!

回答

0

按照mathworks docs

csvwrite(文件名,M)寫入矩陣M到文件名作爲逗號分隔值。文件名輸入是用單引號括起來的字符向量,例如'csvlist.dat'。

因此,您對csvwrite的調用失敗,因爲它只能處理矩陣,而不是單元格。此外,你的代碼中有幾個問題:

  1. 你不指定County_valueCounty_lonCount_lat向量的大小。更重要的是,County_value似乎存儲可能有不同長度的字符串,並且assingmente County_value(i,1) = Table{1+(-1)*11}可能會導致錯誤。
  2. 您不初始化D_apt單元格。特別是,您的sintax D_apt(:,1+2*(i-1)) = Table{1,4+(i-1)*11};會嘗試將D_apt變量的大小調整爲其值在Table元素中給出的2維單元格。
  3. 目前還不清楚您希望如何將數據寫入csv文件。

爲了使用你提供的單元寫入csv文件,你有兩個選擇:

  1. 使用一個fprintf中的語句與您需求的格式字符串。
  2. 修改單元格以獲取可以通過csvwrite正確處理的矩陣。

我會第一個選項來解決您的特定問題,但請記住,如果您能夠更改創建單元的代碼,如果可能更清晰或更簡單,將單元分割爲單獨的變量爲數字和字符串值。

csvfile = fopen('csvfilename.csv','w'); 
delimiter = ','; 
if isunix 
    newline = '\n'; 
else 
    newline = '\r\n'; 
end 
for i = 1:length(Table) 
    index11 = mod(i-1/11)+1; 
    if index11==1 % City 
     fprintf(csvfile,['%s',delimiter],Table{i}); 
    elseif index11==2 || index==3 % Lon or Lat 
     fprintf(csvfile,['%f',delimiter],Table{i}); 
    elseif mod(index11,2)==0 % Pair indeces: Names 
     fprintf(csvfile,['%s',delimiter],Table{i}); 
    else % Impair indeces: Values 
     if index11<11 
      fprintf(csvfile,['%s',delimiter],mat2str(Table{i})); 
     else 
      fprintf(csvfile,['%s',newline],mat2str(Table{i})); 
     end 
    end 
end 

我很抱歉,如果我沒理解你的意思與

{1,5},{1,7},{1,9},{1,11}已與數圖片中顯示的範圍。
但圖像不是很清晰。