Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

genvarname

根据字符串构造有效的变量名称

兼容性

注意

在以后的版本中将会删除 genvarname。请改用 matlab.lang.makeValidNamematlab.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 之前推出