MATLAB coder 支持的 csvread 函数

Posted

技术标签:

【中文标题】MATLAB coder 支持的 csvread 函数【英文标题】:csvread function supported by MATLAB coder 【发布时间】:2017-07-24 18:33:39 【问题描述】:

我有一个 MATLAB 脚本,其中包含一个 csvread 调用,用于从 csv 文件中读取数据。现在我正在尝试使用 MATLAB Coder 将我的 MATLAB 脚本编译成 C。但是,对于 C 代码生成,csvread 是 not a member of the supported functions。

我发现的唯一读取文件函数是fread,它只读取二进制文件。有没有办法使用fread 读取 csv 文件或者有什么办法解决这个问题?

示例 MATLAB 脚本:

data = csvread('data.csv');

示例 csv 文件:

1
2
3
4

【问题讨论】:

【参考方案1】:

当然,您可以使用fread 读取.csv 文件,您只需要自己处理即可。假设您有 myfile.csv,其中包含文本 1, 2, 3, 4

>> fid = fopen('myfile.csv','r');
>> a = fread(fid, 'char')'
a =
    49    44    32    50    44    32    51    44    32    52    13    10
>> b = char(a)
b =
1, 2, 3, 4
>> fclose(fid);

MATLAB Coder 支持所有这些命令。 b 现在是一个包含文本 1, 2, 3, 4 的字符串。

您现在需要处理该字符串以从逗号之间提取数字。这是 MATLAB Coder 不支持的 csvread 部分,因为在 csvread 中它使用了 MATLAB Coder 不支持的正则表达式。

但是,您可能会发现它比您想象的要容易,因为 csvread 中的正则表达式必须涵盖任何 .csv 文件的一般情况(可能包括文本字段以及数字和字段被引用并且引号内可以有逗号,甚至可能还有 Unicode 文本)。如果您只有数字、逗号和空格,应该不会太难 - 只需逐个字符地遍历文本,每次找到逗号时停止,然后在该部分调用 str2double

【讨论】:

【参考方案2】:

fscanf 受 MATLAB Coder 支持,并将行转换为数字:

fid = fopen('data.csv');
data = fscanf(fid, '%d');
fclose(fid);

阅读示例中的单列。

【讨论】:

以上是关于MATLAB coder 支持的 csvread 函数的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB Coder 语法错误和不支持的函数

Matlab读取csv文件csvread函数的使用

MATLAB Coder 中的多态性

matlab读取cvs文件的几种方法

MATLAB Coder:稀疏矩阵

怎样用matlab读取csv文件