(matlab)从单元格数据中写入csv文件

时间:2016-12-05 15:03:54

标签: matlab csv

我在matlab中创建了单元格文件。

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

我继承了County Value,lon,lat和D_apt(:,1 + 2 *(i-1))。但是,当我尝试创建D_apt {:,2 * i} ...

时出错

我需要你的帮助!!

谢谢,谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

根据mathworks docs

  

csvwrite(filename,M)将矩阵M作为逗号分隔值写入filename。文件名输入是一个字符向量,指定为用单引号括起来的文本,例如'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变量的大小调整为2维单元格,其值在Table元素中给出。
  3. 目前还不清楚您希望如何将数据写入csv文件。
  4. 为了使用您提供的单元格编写csv文件,您有两种选择:

    1. 使用带有符合您需求的格式字符串的fprintf语句。
    2. 修补单元格以获得可由csvwrite正确处理的矩阵。
    3. 我会选择第一个解决您特定问题的方法,但请记住,如果您能够更改创建单元格的代码,那么将单元格拆分为数字的单独变量可能更简洁或更简单和字符串值。

      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}有这个号码使用图片中显示的范围。
      但图像不太清晰。