1

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

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

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

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

还有我的一些列名:

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

非常感谢您的帮助。

4

1 回答 1

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'以用下划线替换它们或完全删除它们。我会使用十六进制值,因为如果您以后需要这些值,它可以让您选择将列名转换回其原始字符串值。以下是使用regexprephex2dec和的方法char

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

originalNames =

  1×3 cell array

    'maß'    'kapazität'    'räder'
于 2017-08-10T15:42:07.053 回答