genvarname
根据字符串构造有效的变量名称
兼容性
注意
在以后的版本中将会删除 genvarname
。请改用 matlab.lang.makeValidName
和 matlab.lang.makeUniqueStrings
。
语法
varname = genvarname(str)
varname = genvarname(str, exclusions)
说明
varname = genvarname(str)
构造一个字符串或字符向量 varname
,它与 str
输入相似或相同,并且可作为有效的变量名称使用。str
可以是字符串、字符串数组、字符数组或字符向量元胞数组。如果 str
是字符串数组或字符向量元胞数组,genvarname
将在 varname
中返回字符串数组或字符向量元胞数组。genvarname
返回的元素保证彼此不同。
varname = genvarname(str, exclusions)
返回一个与 exclusions
输入中所列的任何名称不同的有效变量名称。exclusions
输入可以是字符串、字符串数组、字符数组或字符向量元胞数组。在 exclusions
中指定函数 who
,以创建将在当前 MATLAB® 工作区中具有唯一性的变量名称(请参阅下面的示例 4)。
注意
genvarname
不在 MATLAB 工作区中创建变量。因此,您无法给 genvarname
的输出赋值。
示例
示例 1
创建四个互不冲突的类似变量名称:
v = genvarname({'A', 'A', 'A', 'A'}) v = 'A' 'A1' 'A2' 'A3'
示例 2
从 Excel® 电子表格 myproj_apr23 中的工作表 trial2
读取列标题 hdr
:
[data hdr] = xlsread('myproj_apr23.xls', 'trial2');
根据列标题文本创建一个不会与其他名称冲突的变量名称:
v = genvarname(['Column ' hdr{1,3}]);
将从电子表格获取的数据赋给 MATLAB 工作区中的变量:
eval([v '= data(1:7, 3);']);
示例 3
在一小时之内每隔一分钟将工具中的读数收集到一个结构体的不同字段中。使用一个随机数模拟工具的读数。genvarname
不仅会生成具有唯一性的字段名称,还会在 MATLAB 工作区中创建结构体和字段。
for k = 1:60 record.(genvarname(['reading' char(datetime('now','Format','HHmmSS'))])) = rand(1); pause(60) end
在程序结束后,显示工作区中记录的数据:
record record = reading092610: 0.6541 reading092710: 0.6892 reading092811: 0.7482 reading092911: 0.4505 reading093011: 0.0838 . . .
示例 4
通过将 who
函数的输出放在 exclusions
列表中来生成在 MATLAB 工作区中唯一的变量名称。
for k = 1:5 t1 = datetime('now'); pause(uint8(rand * 10)); t2 = datetime('now'); v = genvarname('time_elapsed', who); eval([v ' = seconds(t2 - t1)']) end
在此代码运行时,您可以看到 genvarname
创建的变量在工作区中是唯一的:
time_elapsed = 5.0070 time_elapsed1 = 2.0030 time_elapsed2 = 7.0010 time_elapsed3 = 8.0010 time_elapsed4 = 3.0040
程序完成后,使用 who
函数查看工作区变量:
who k time_elapsed time_elapsed2 time_elapsed4 t time_elapsed1 time_elapsed3 v
示例 5
如果您尝试使用某个 MATLAB 关键字来生成变量名称,genvarname
会通过将该关键字首字母大写并在前面加上字母 x
来创建变量名称:
v = genvarname('global') v = xGlobal
示例 6
如果您输入的字符向量比 namelengthmax
函数返回的值长,genvarname
会截断生成的变量名称字符向量:
namelengthmax ans = 63 vstr = genvarname(sprintf('%s%s', ... 'This name truncates because it contains ', ... 'more than the maximum number of characters')) vstr = ThisNameTruncatesBecauseItContainsMoreThanTheMaximumNumberOfCha
提示
有效的 MATLAB 变量名称是由字母、数字和下划线组成的字符向量,因此第一个字符是字母,而向量长度小于或等于 namelengthmax
函数返回的值。超出 namelengthmax
的任何字符向量将在 varname
输出中被截断。请参阅下面的示例 6。
genvarname
返回的变量名称不能保证不同于当前位于 MATLAB 工作区中的其他变量名称,除非您以如下所示示例 4 方式使用 exclusions
输入。
如果您使用 genvarname
生成结构体的字段名称,MATLAB 会在 MATLAB 工作区为该结构体和字段创建一个变量。请参阅下面的示例 3。
如果 str
输入包含任何空白字符,genvarname
会删除该字符并将 str
中的下一个字母字符改为大写形式。如果 str
包含任何非字母数字字符,genvarname
会将这些字符转换为其十六进制值。
扩展功能
版本历史记录
在 R2006a 之前推出