リスト内の値の検索リストがある場合:
リスト = {ヘンリー(1,2)、ロバート(3,4)、ジョン(. ,6)、カイ(13, . ) };
ただし、テーブルごとに名前の位置は常に異なります。
リスト = {ヘンリー(1,2)、ロバート(3,4)、カイ(13, . )、ジョン(. ,6) };
また、特定の名前が欠落している場合もあります。
リスト = {ヘンリー(1,2)、ロバート(3,4) };
Contains(List, List[1]) を使用できることはわかっていますが、その方法ではリスト内の値の位置が考慮されます。 「Henry」のような文字列を検索して、Henry の (1,2) を抽出し、1 を 1 つの変数として保存し、2 を別の変数として保存する方法があることを知りたいです。 ありがとう
Re: リスト内の値の検索やあ、ありがとう、正規表現を使ってうまくいきました。@vince_faller
Re: リスト内の値の検索これで希望通りのことができるはずです。
Names Default to here(1);
Extract Expr({Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) }, Henry(Wild(), Wild()));
//or for a more complete answer
l = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
extracted = Eval(Substitute(
Expr(
Extract Expr(DV_LIST, Henry(WildList()));
),
Expr(DV_LIST), nameexpr(l)
));
first = Arg(extracted, 1);
second = Arg(extracted, 2);Re: リスト内の値の検索やあ@aam_jmp 、
フォローアップ@uday_guntupalli正規表現を使用するという さんの提案に基づいて、Contains() を使用した簡単なスクリプトを示します。これは同様に機能し、var1 と var2 に値を保存します。変数「found」は、名前が見つかった場合にループを早期に終了するため、または var1 と var2 を missing に設定しているときに検索文字列がリスト内に見つからなかったというメッセージを出力するために使用されます。
search_str = "Henry";
found = 0;
for(i = 1, i <= N Items(MyList), i++,
temp = char(MyList[i]);
If(Contains(temp,search_str) > 0,
var1 = num(word(2,temp,"(),"));
var2 = num(word(3,temp,"(),"));
found = 1;
);
if(found, break());
if(i == N Items(MyList) & !found,
Print("Search term not found in the list.");
var1 = .;
var2 = .;
)
);Re: リスト内の値の検索@aam_jmp 、
正規表現を使用して、必要な文字列を検索できます。 検索したい範囲をできるだけ広くカバーできるように検索語を構築する必要があり、正規表現の力は、検索語をどれだけうまく構築できるかによって発揮されます。
以下の例では、「Henry」という用語のみの検索をカバーしています。
Clear Log(); Clear Globals();
MyList = List = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
SelInd = {};
for(i = 1, i <= N Items(MyList), i++,
If(!IsMissing(Regex(Char(MyList[i]),"Henry")),
Insert Into(SelInd,i);
);
);