こんにちは、
私は次のようなテーブルを持っています
| ID | 列2 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
「ABC001234D」や「ABC001234F」などのすべての値が「ABC001234」になるようにID列を再コーディングしたいと思います。基本的に、ステートメントの最後の文字を削除します。 ただし、手動でこれを行うことはできません。 行が多すぎて実行できず、スクリプトで使用できるIDごとに手動で書き込むことができませんでした。 スクリプトを使用してこれを行う方法を探しています。 ありがとう!
こんにちは、サニール!
これが役立つかもしれない式ですが、命名規則とID変数の精度についていくつかの仮定をする必要があります。
ID値の先頭が常に3文字である場合は、新しい列を作成して次の式を使用できます。
Substr(:ID、1、3)||正規表現(:ID、 "\ d +")
この式では、一貫性のない長さの数値が許可されます。ID値の先頭に一貫性のない文字数があるように式を適応させることもそれほど難しくありません。ただし、誰かがIDをO(文字)ではなく0(数字)と間違えた場合、またはその他の特定の誤植があった場合、予期しない結果が生じる可能性があります。
がんばろう、
ケビン
これは、次の式で実行できます。
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
これにより、末尾の数値以外の値がすべて削除されます
このために私は正規表現で行きます。 少なくともあるレベルで正規表現を使用するために、ある時点でこれが好きでした。 regexoneまた、チェックアウトJMP文字関数-正規表現スクリプトインデックスからの正規表現。
これは、JMPで正規表現を使用して終了文字を削除する2つの可能な方法の例です(大文字以外の文字もサポートするように簡単に変更できます)。
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
ユースケースに応じて、次のいずれかを選択します(サンプルコードを使用して、さまざまな文字列でどのように機能するかを簡単にテストできます)。
最初の文字は、文字列の先頭から任意の桁数が続く1つ以上の大文字に一致します(したがって、桁の後はすべて無視されます)。
2つ目は、文字列の末尾から0個以上の大文字に一致し、それらを空の文字列に置き換えます。