Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

genvarname

string から有効な変数名を作成

互換性

メモ

genvarname は将来のリリースで削除される予定です。代わりに matlab.lang.makeValidNamematlab.lang.makeUniqueStrings を使用してください。

構文

varname = genvarname(str)
varname = genvarname(str, exclusions)

説明

varname = genvarname(str) は、入力 str と類似または同一の string または文字ベクトルからなり、有効な変数名として使用できる varname を作成します。str には、string、string 配列、文字配列、または文字ベクトルの cell 配列を指定できます。str が string 配列または文字ベクトルの cell 配列の場合、genvarnamevarname に string 配列または文字ベクトルの cell 配列を返します。genvarname によって返される要素は、確実に相互に異なります。

varname = genvarname(str, exclusions) は入力 exclusions に列挙された名前と重複しない有効な変数名を返します。入力 exclusions には、string、string 配列、文字配列、または文字ベクトルの cell 配列を指定できます。exclusions に関数 who を指定すると、現在の MATLAB® ワークスペース内で一意の変数名が作成されます (後述の例 4を参照)。

メモ

genvarname は、MATLAB ワークスペース内に変数を作成しません。そのため、関数 genvarname の出力に値を割り当てることはできません。

例 1

相互に重複しない 4 つの類似した変数名を作成します。

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

期間を 1 時間として、1 分ごとに測定器の読み取りを収集し、それらを構造体のさまざまなフィールドに格納します。乱数を使用して測定器の読み取りをシミュレートします。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を参照してください。

exclusions 入力を後述の例 4に示す方法で指定しないかぎり、関数 genvarname によって返された変数名が、MATLAB ワークスペースに現在存在する他の変数名と重複しないことは保証されません。

関数 genvarname を使用して構造体のフィールド名を生成する場合には、MATLAB は構造体およびフィールドの変数を MATLAB ワークスペースに作成します。以下の例 3を参照してください。

入力 str に空白文字が含まれる場合、関数 genvarname は、空白文字を削除し、str 内の次のアルファベット文字を大文字にします。str にアルファベット以外の文字が含まれる場合、関数 genvarname はこれらの文字を 16 進数値に変換します。

拡張機能

バージョン履歴

R2006a より前に導入