我在MATLAB中工作并尝试将Column标题中的单位添加到值表中,然后我将插入到SQLite数据库中,但我有一个德语字符的列名(例如'ß','ä'),但是由于特殊字符,这是无效的。根据迄今为止我发现的所有内容都说列标题必须是有效的变量名,例如仅限字母数字和“_”。
但我无法更改原始数据库列名,所以有人知道它的解决方法吗?
构建表并发送到数据库的代码是:
insertData = cell2table(full_matrix,'VariableNames',colnames);
insert(conn,tableName,colnames,insertData);
我的一些专栏名称:
'maß','kapazität', 'räder'
非常感谢您的帮助。
答案 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'
以使用下划线替换它们或完全删除它们。我会使用十六进制值,因为它为您提供了将列名称转换回原始字符串值的选项,如果您以后需要这些值。以下是使用regexprep
,hex2dec
和char
执行此操作的方法:
originalNames = regexprep(validNames, '0x([\dA-F]{2})', '${char(hex2dec($1))}');
originalNames =
1×3 cell array
'maß' 'kapazität' 'räder'