MATLAB将存储在double数组和单元格数组中的数据导出为CSV文件

我有一个19个字段的MATLAB结构。 主场是一个1×108033双数值的所有值。 它看起来像这样,基本上108033数字:

pnum: 5384940 5437561 5570271 5661637 5771155 ... 

我还有一个叫inventors领域是1×108033单元格值。 每个单元格包含不同数量的string。 例如列1到5

 inventors: {2x1 cell} {4x1 cell} {1x1 cell} {1x1 cell} {1x1 cell} 

对于第一列值,2 x 1单元由以下值5012491-012035147-03等组成。

我想共同导出这两个CSV文件。 理想的结果将重复pnum的数字,以便在pnuminventors之间build立明确的联系。 因此,理想的结果看起来像这样(与inventors单元格内容一起显示)。

 pnum inventors 5384940 5012491-01 5384940 2035147-03 5437561 5437561-01 5437561 5437561-02 5437561 5437561-03 5437561 5012491-02 5570271 5437561-03 5661637 1885634-08 5771155 5012491-01 

我之前问过这个问题的一个更复杂的版本,但是问题不清楚。 希望是现在。

我假设inventors人中的每个单元格都是一个单元格的string。 将这些数据作为实际浮点数或整数数字是没有意义的,因为短划线会将两个数字相减。 现在,因为您正在写入CSV文件,所以我能想到的最简单的方法就是遍历每个数字和单元格,然后重复ID号码的次数,使其与单元格中的元素一样多。 首先创build正确的标题,然后写下你的结果。 想到这样的事情:

 f = fopen('data.csv', 'w'); %// Open up data for writing fprintf(f, 'pnum,inventors\n'); %// Write headers for ii = 1 : numel(pnum) %// For each unique number inventor = inventors{ii}; for jj = 1 : numel(inventor) %// For each inventor ID fprintf(f, '%d,%s\n', pnum(ii), inventor{jj}); %// Write the right combo to file end end fclose(f); %// Close the file 

fopen这里打开一个名为data.csv的文件,所以我们可以写东西给它。 返回的是一个名为f的文件指针,我们用它来写这个文件。 之后,我们编写文件的头文件,由pnuminventors组成。 这是一个CSV文件,所以有一个逗号分隔两个。 现在,对于每个唯一的编号,我们然后访问inventors的正确插槽,然后为每个独特的发明者,在该文件中添加与正确的发明者ID相同的唯一ID作为一行。 我使用fprintf来使用前面build立的关联文件指针来写入文件。 完成后,使用fcloseclosures文件。


要仔细检查这个工作,我已经使用了你在文章中提供的小例子:

 pnum = [5384940 5437561 5570271 5661637 5771155]; inventors = {{'5012491-01', '2035147-03'}.', {'5437561-01', '5437561-02', '5437561-03', '5012491-02'}.', {'5437561-03'}, {'1885634-08'}, {'5012491-01'}}; 

请记住,我没有访问你的struct ,所以你必须访问正确的领域,并将其分配给上面看到相应的variables。 所以如果你的struct被称为类似于data东西,那么在运行上面的代码之前,你应该这样做:

 pnum = data.pnum; inventors = data.inventors; 

运行上面的代码我只是写和打开CSV文件(这就是所谓的data.csv ),我得到这个:

 pnum,inventors 5384940,5012491-01 5384940,2035147-03 5437561,5437561-01 5437561,5437561-02 5437561,5437561-03 5437561,5012491-02 5570271,5437561-03 5661637,1885634-08 5771155,5012491-01