MATLAB列标题无效变量名称

时间:2017-08-10 13:29:37

标签: matlab variables character naming-conventions matlab-table

我在MATLAB中工作并尝试将Column标题中的单位添加到值表中,然后我将插入到SQLite数据库中,但我有一个德语字符的列名(例如'ß','ä'),但是由于特殊字符,这是无效的。根据迄今为止我发现的所有内容都说列标题必须是有效的变量名,例如仅限字母数字和“_”。

但我无法更改原始数据库列名,所以有人知道它的解决方法吗?

构建表并发送到数据库的代码是:

insertData = cell2table(full_matrix,'VariableNames',colnames);
insert(conn,tableName,colnames,insertData);

我的一些专栏名称:

'maß','kapazität', 'räder'

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先创建table吗?我会尝试将数据的单元格数组直接传递给insert,如下所示:

insert(conn, tableName, colnames, full_matrix);

以上假设cell2table调用正在为您提供与特殊字符相关的错误。如果是insert调用,那么我猜MATLAB将不允许您创建列名不符合其变量命名约定的数据库。如果是这种情况,您必须将列名称转换为有效的值,您可以使用genvarname(对于较旧的MATLAB版本)或matlab.lang.makeValidName(建议用于版本R2014a和更新版本):

colNames = {'maß','kapazität', 'räder'};
validNames = genvarname(colNames);
% or...
validNames = matlab.lang.makeValidName(colNames, 'ReplacementStyle', 'hex');

validNames =

  1×3 cell array

    'ma0xDF'    'kapazit0xE4t'    'r0xE4der'

请注意,上述解决方案会将无效字符替换为十六进制等效字符。您也可以更改'ReplacementStyle'以使用下划线替换它们或完全删除它们。我会使用十六进制值,因为它为您提供了将列名称转换回原始字符串值的选项,如果您以后需要这些值。以下是使用regexprephex2decchar执行此操作的方法:

originalNames = regexprep(validNames, '0x([\dA-F]{2})', '${char(hex2dec($1))}');

originalNames =

  1×3 cell array

    'maß'    'kapazität'    'räder'