Importing a Table :: [Variables are been modified by Matlab]
69 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tejas Sonavane
am 28 Apr. 2016
Kommentiert: Steven Lord
am 12 Okt. 2021
Hi I have recently started using matlab. I am trying to import a spreadsheet as a table and some of my variables [Colum Names] get modified when I look at them using T.Properties.Variablenames. So I checked the function genvalidnames which is apparently responsible for changing the "non-matlab" variable names to standard matlab variable names. My Column names in the Spreadsheet all start with a character, have only underscores and are not longer than nameslength which i checked is 63. Still I get the modified names. Any idea why this will be happening.
5 Kommentare
Akzeptierte Antwort
Image Analyst
am 28 Apr. 2016
I don't see how it's being changed. Here is my code:
t = readtable('VAT_Experiment_Sheet_Assign_Table_Structure_Units.xlsx')
fieldnames(t)
and here is what I see:
ans =
'DCDC_CurrentLimiting_Warning_BOOL'
'DCDC_CoolantOTP_Warning_BOOL'
'DCDC_Wakeup_Status_BOOL'
'DCDC_UnitEnabled_Status_BOOL'
'DCDC_StartUpInitDone_Status_BOOL'
'DCDC_RemoteShutdown_Status_BOOL'
'DCDC_LatchedFault_Status_BOOL'
'DCDC_InputOk_Status_BOOL'
'DCDC_HVIL_OK_Status_BOOL'
'DCDC_Status_Fault_BOOL'
'DCDC_Thermistor_Fault_BOOL'
'DCDC_ShortCircuit_Fault_BOOL'
'DCDC_OutputUV_Fault_BOOL'
'DCDC_OutputOV_Fault_BOOL'
'DCDC_OutputOC_Fault_BOOL'
'DCDC_OTP_Fault_BOOL'
'DCDC_InputUV_Fault_BOOL'
'DCDC_InputOV_Fault_BOOL'
'DCDC_I2C_FAULT_BOOL'
'DCDC_EEPROM_CRCfault_Fault_BOOL'
'DCDC_CANfault_Fault_BOOL'
'DCDCReversPolarity_Fault_BOOL'
'DCDC_ReversPolarity_Status_BOOL'
'DCDC_Coolant_Temprature_VALUE_DEGC'
'DCDC_Output_CURRENT_VALUE_AMP'
'DCDC_Input_Voltage_VALUE_VOLT'
'DCDC_Output_Voltage_VALUE_VOLT'
'DCDC_Output_voltage_UV_Fault_BOOL'
'DCDC_Output_voltage_OV_Fault_BOOL'
'DCDC_Output_limit_Current_VALUE_AMP'
'DCDCOutput_setpoint_Voltage_VALUE_VOLT'
'DCDCDcDc_Set_index_byte_Mplx'
'DCDC_RemoteEnable_Status_ENUM'
'DCDC_Temperature_coolant_Warning_VALUE_DEGC'
'DCDC_Temperature_Coolant_Fault_BOOL_DEGC'
'Properties'
Unless I'm overlooking something, like a double underline or something, the "DCDC_OutputOC_Fault_BOOL" looks the same in both Excel and MATLAB.
4 Kommentare
Steven Lord
am 14 Dez. 2020
As of release R2019b variable names in table arrays are allowed to contain spaces. They are no longer required to be valid variable names. [Note that in release R2020b which I am using the name of the option for readtable to preserve the variable names has changed, see the R2020b Release Notes by changing the release filter to see that note.] Cell E1 in scores.xlsx is "Winning Percentage" with a space.
>> t = readtable('c:\temp\scores.xlsx')
Warning: Column headers from the file were modified to make them valid MATLAB identifiers before
creating variable names for the table. The original column headers are saved in the
VariableDescriptions property.
Set 'VariableNamingRule' to 'preserve' to use the original column headers as table variable names.
t =
4×5 table
Team Wins Losses Ties WinningPercentage
____________ ____ ______ ____ _________________
{'Bills' } 10 3 0 0.769230769230769
{'Dolphins'} 8 5 0 0.615384615384615
{'Patriots'} 6 7 0 0.461538461538462
{'Jets' } 0 12 0 0
>> t2 = readtable('c:\temp\scores.xlsx', 'VariableNamingRule', 'preserve')
t2 =
4×5 table
Team Wins Losses Ties Winning percentage
____________ ____ ______ ____ __________________
{'Bills' } 10 3 0 0.769230769230769
{'Dolphins'} 8 5 0 0.615384615384615
{'Patriots'} 6 7 0 0.461538461538462
{'Jets' } 0 12 0 0
>> t2{2, "Winning percentage"}
ans =
0.615384615384615
Weitere Antworten (1)
Bill Tubbs
am 12 Okt. 2021
Bearbeitet: Bill Tubbs
am 12 Okt. 2021
The answer by Steven Lord didn't work for me. I got this error:
Error using readtable (line 198)
Unknown Parameter 'VariableNamingRule'.
readtable(filename,'PreserveVariableNames',true)
3 Kommentare
Bill Tubbs
am 12 Okt. 2021
Ah, sorry I missed that. Thanks. I guess I will have to update my code next year when I upgrade MATLAB...
Steven Lord
am 12 Okt. 2021
You could future proof your code now while it's fresh in your mind. Use verLessThan to determine if the MATLAB installation is older than release R2020b. Use PreserveVariableNames if it is and VariableNamingRule if it is not.
if verLessThan('matlab', '9.9') % 20b
parametersToUse = {'PreserveVariableNames', true};
else
parametersToUse = {'VariableNamingRule', 'preserve'};
end
fprintf("The option is %s and the value you have selected is %s.\n", ...
string(parametersToUse))
You can use parametersToUse as a comma-separated list.
parametersToUse{:}
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!