【问题标题】:Saving a .mat file in csv format以 csv 格式保存 .mat 文件
【发布时间】:2022-01-06 01:12:50
【问题描述】:

我有一个.mat文件,数据结构如下。

数据 =

带有字段的结构:

        axis1: [25626600×1 double]
        axis2: [25626600×1 double]
        axis3: [25626600×1 double]
      datenum: [25626600×1 double]
  sample_rate: 30
serial_number: 'MOS2D10171145'

我希望将此 .mat 文件另存为 csv 文件。

我尝试了这段代码,但它给了我这个错误。

csvwrite('FileName.csv', Data);

Undefined function 'real' for input arguments of type 'struct'.

Error in dlmwrite (line 189)
                    str = sprintf('%.*g%+.*gi',precn,real(m(i,j)),precn,imag(m(i,j)));

Error in csvwrite (line 42)
dlmwrite(filename, m, ',', r, c);

【问题讨论】:

  • 您希望 csv 看起来像什么,只是一个 2562600x4 表(没有 sample_rateserial_number 信息)?阅读csvwrite 的文档,它需要一个矩阵输入,你给它一个结构,它没有很好地定义你希望如何从一个结构转换为“平面”csv 格式

标签: matlab csv


【解决方案1】:

正如 Wolfie 所解释的,您不能直接执行此操作,因为您的 sample_rateserial_number 变量无法在 CSV 中直接执行。

解决方案是将这 2 个变量放在 CSV 文件名中以保留它们。

%% Parameters
cdSAVE='YOUR_PATH'; % PUT YOUR SAVING PATH

%% Variables (put your own)
axis1 = zeros(250,1);
axis2 = zeros(250,1)+1;
axis3 = zeros(250,1)+2;
datenum = zeros(250,1)+3;
sample_rate = 30;
serial_number = 'SERIAL_NUMBER';

%% Make a matrix with what you can
Matrix = zeros(length(axis1),4);
Matrix(:,1)=axis1;
Matrix(:,2)=axis2;
Matrix(:,3)=axis3;
Matrix(:,4)=datenum;

%% Convert to table (to have the headers written in your csv file)
T = array2table(Matrix);
T.Properties.VariableNames(1:4) = {'axis1','axis2','axis3','datenum'};

%% Create a the filename with the 2 other datas
fileName = char(strcat('Extract_CSV_Sample_rate_',string(sample_rate),'_Serial_Number_',serial_number,'.csv'));

%% Writing
fullPathFileName=char(strcat(cdSAVE,"\",fileName));

%% Choose what you want :

%% Here for just the matrix with csvwrite
csvwrite(fullPathFileName,Matrix);

%% Here with headers also with writetable
writetable(T,fullPathFileName)

CSV 名称将是:Extract_CSV_Sample_rate_30_Serial_Number_SERIAL_NUMBER.csv

【讨论】:

  • 您不需要继续转换为char,而是使用sprintf 或简单的['char', 'concatenation']fullfile 来创建文件名。您还可以使用 array2table( Matrix, 'VariableNames', {'a','b','c','d'} ); 将调用中的 var 名称设置为 array2table
猜你喜欢
  • 2022-08-23
  • 1970-01-01
  • 2014-01-16
  • 2014-06-13
  • 2021-02-11
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多