2017-08-10 1766 views
1

我在MATLAB工作,並試圖單位列標題添加到值的表,然後我將插入SQLite數據庫,但我的德語字符列的名稱(如「SS」 ,'ä'),但由於特殊字符而無效。根據我迄今發現的所有內容,都說列標題必須是有效的變量名,例如只有字母數字和「_」。MATLAB列標題不是有效的變量名

但我不能改變我原來的數據庫列名,以便沒有人知道一個的變通呢?

我建一個表,併發送到數據庫的代碼是:

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

我的一些列名:

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

非常感謝你的幫助。

回答

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' 
+0

你好,我很抱歉,如果它花了很長的答覆,但我想你的代碼,並試圖插入後,給了我這個錯誤:發生Java異常: java.sql.SQLException中:[SQLITE_ERROR] SQL錯誤或丟失 數據庫(表 'BLA' 沒有名爲ma0xDF_id柱);名字在原始數據庫中是maß_id。謝謝 – cagatay24

+0

對於第一條評論我很抱歉,在我發送給originalNames插入(conn,tableName,originalNames,full_matrix)之後它正在工作。它的工作。謝謝! – cagatay24