我有一个包含19个字段的MATLAB结构。主要字段是1 x 108033双,所有值都是数字。它看起来像这样,基本上是108033号码:
pnum: 5384940 5437561 5570271 5661637 5771155 ...
我有另一个名为inventors
的字段,它是一个1 x 108033的单元格值。每个单元格包含不同数量的字符串。例如,第1列到第5列是
inventors: {2x1 cell} {4x1 cell} {1x1 cell} {1x1 cell} {1x1 cell}
对于第一列值,2 x 1单元格由以下值组成
5012491-01
和2035147-03
等等。
我想将这两个联合导出到CSV文件中。理想的结果会重复pnum
中的数字,以便在pnum
和inventors
之间建立明确的联系。因此,理想的结果看起来像这样(显示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
我问过这个问题的更复杂版本before,但问题不明确。希望现在是。
答案 0 :(得分:1)
我假设inventors
中的每个单元格都是字符串的单元格数组。将这些作为实际的浮点数或整数数字是没有意义的,因为破折号会减去将它们分开的两个数字。现在,因为您正在写入CSV文件,我能想到的最简单的事情是遍历每个数字和单元格,然后重复ID号码,与单元格中的元素一样多次。首先创建正确的标题,然后编写结果。想到这样的事情:
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
的文件指针,我们用它来写东西给这个文件。之后,我们编写文件的标题,包含pnum
和inventors
。这是一个CSV文件,因此将逗号分隔开来。现在,对于每个唯一编号,我们然后访问inventors
中的右侧插槽,然后为每个唯一的发明人添加相同的唯一ID,并将正确的发明人ID作为该文件中的一行。我使用fprintf
使用之前建立的相关文件指针将文件写入文件。完成后,请使用fclose
关闭文件。
要仔细检查这是否有效,我已经使用了您在帖子中提供的小例子:
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
,因此您必须访问正确的字段并将其分配给上面显示的相应变量。因此,如果您的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