MATLAB 编码器支持的 csvread 函数

Chu*_*uby 1 csv matlab matlab-coder

我有一个 MATLAB 脚本,其中包含csvread从 csv 文件中读取数据的调用。现在我正在尝试使用 MATLAB Coder 将我的 MATLAB 脚本编译成 C。但是,csvread不支持的功能的构件对C代码生成。

我发现的唯一读取文件功能是fread只读取二进制文件。有没有办法用来fread读取 csv 文件或者有什么方法可以解决这个问题?

示例 MATLAB 脚本:

data = csvread('data.csv');
Run Code Online (Sandbox Code Playgroud)

示例 csv 文件:

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

Sam*_*rts 5

当然,您可以使用 读取.csv文件fread,您只需要自己处理它。假设您有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);
Run Code Online (Sandbox Code Playgroud)

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

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

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