2017-09-14 471 views
2

我運行是這樣的:表格變量名稱可以以數字字符開頭嗎?

table = readtable(path,'ReadVariableNames',true); 

在.csv文件所有的第一行的單元格包含字符串標識符像'99BM''105CL',等一切始於一個數字。上面的命令給出了一個帶有變量名稱的表,如'x99BM','x105CL'等。

是否有可能擺脫這種'x'?我需要將這些標識符與清除此'x'的另一個表的列進行比較。

+0

**注意:**不要使用'table'作爲變量名稱,因爲它會影響現有函數。 – gnovice

回答

1

不,表變量名稱不能以數字開頭,因爲它們遵循與normal variables相同的命名約定。 'x'自動添加readtable以創建一個有效的名稱。調用readtable時,您應該已經注意到了這樣的警告:

Warning: Variable names were modified to make them valid MATLAB identifiers. 
The original names are saved in the VariableDescriptions property. 

所以,你不能讓內表擺脫'x'的。但是,如果你需要做任何比較,你可以做他們不要保存在VariableDescriptions property的原始值,這將有這樣的格式:

>> T.Properties.VariableDescriptions 

ans = 

    1×2 cell array 

    'Original column heading: '99BM'' 'Original column heading: '105CL'' 

您可以用regular expression分析這些,例如:

originalNames = regexp(T.Properties.VariableDescriptions, '''(.+)''', 'tokens', 'once'); 
originalNames = vertcat(originalNames{:}); 

originalNames = 

    2×1 cell array 

    '99BM' 
    '105CL' 

然後在你需要做的任何字符串比較中使用這些。

0

否如gnovice所述,可讀函數自動重命名無效名稱。它通過調用matlab.lang.makevalidname並將輸出設置爲列名執行此操作。

如果我理解正確,您將比較一個表中列的內容與另一個表的列的名稱。在這種情況下,contains(['x' <contents of single row of column>], table.VariableNames)會將x預加到表列中某行的值(對於此實現,您需要循環遍歷表的每一行),然後將此字符串與表的變量名進行比較。你也可以用arrayfun或其他東西在一行中做到這一點,但我現在正在從內存中做這件事,並且不能記起正確的語法。