文字列からさまざまな長さの数値を異なる列に抽出します日数、時間、分、秒を表す値を持つ Duration という名前の列があります。 最後の m は秒を表します。
したがって、典型的な形式は次のようになります: (0-365)d(0-24)h(0-60)m(0-60)m
ここではいくつかの例を示します。:
0 日 15 時間 47 分 43 分
10 日 10 時間 21 分 54 分
0 日 04 時間 07 分 32 分
268日 06時 02分 33分
計算を実行できるように、さまざまな列で日数、時間、分、および秒を抽出する必要があります。
日数を抽出する式を試してみましたが、
Words( :Duration, "d" )[1]
2番目の数値を抽出するために、次の式を使用しました:
Substr( Item( 2, :Duration ), 1, 2 );
同様に、Item 式で 3 と 4 を使用して 3 番目と 4 番目の数値を抽出しました。
これらの文字列を数値に変換するために、さらに 4 つの列を作成し、コピーして貼り付け、データ型を数値に変更しました。
これは、結果に到達するための回り道であることを理解しています。
誰かがより効率的な方法で私を助けることができるかどうか疑問に思っていました.
データ表スクリプティングRe: 文字列からさまざまな長さの数値を異なる列に抽出するログを教えてくれてありがとう。 そこで結果を見ました。以前は結果が別のウィンドウに表示されると思っていました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出するマーク
結果が別のウィンドウに表示されるという印象を受けました。 さて、ログを調べたところ、スクリプトを何度も実行したのと同じように結果が表示されていました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する@txnelson正しい。 彼はそれを別のスクリプトとして使用する方法を示しました。 列の数式に必要なのは次の式だけです。
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Re: 文字列からさまざまな長さの数値を異なる列に抽出する@マークベイリーscript はスタンドアロンの JSL です。これをスクリプト ウィンドウに入れてスクリプトを実行することで実行します。私はそれを行い、うまく機能し、JMPログに次の結果が表示されました
day = 0;
day = 10;
day = 0;
day = 268;
Re: 文字列からさまざまな長さの数値を異なる列に抽出するマーク、
あなたのスクリプトをさまざまな方法で使用してみました
a) スクリプト エディタでスクリプトを使用して実行する。
b) 「セル」という名前の列を作成し、そこにアイテムのリストを入力 + 別の列「日」を作成し、その列の式として「for ループ」を使用
および他の方法。
エラーが発生します。
スクリプト インデックスも調べてみました。
しかし、スクリプトを機能させることができません。私はスクリプトを書くのが初めてです。 助けてください。
Re: 文字列からさまざまな長さの数値を異なる列に抽出するこれまでのところ、いくつかの優れたソリューションが得られていますが、単語()関数。
Words() 関数の最後の引数に複数の区切り文字を指定できるため、これを行うことができます。
vals={"0d 15h 47m 43m", "10d 10h 21m 54m","0d 04h 07m 32m", "268d 06h 02m 33m"};
for (i=1, i<=nitems(vals), i++,
show(words(vals[i], "dhm ")) //use "d" "h" "m" and a space as delimiters
);
ログ内:
/*:
Words(vals[i], "dhm ") = {"0", "15", "47", "43"};
Words(vals[i], "dhm ") = {"10", "10", "21", "54"};
Words(vals[i], "dhm ") = {"0", "04", "07", "32"};
Words(vals[i], "dhm ") = {"268", "06", "02", "33"};
ここでは、数式エディタに、 In Days()、In Hours()、In Minute() 関数数値を各単位の秒数に変換し、Duration 列を作成します。

ここにもデータ表を添付しました。
このトピックでは、私のお気に入りの 2 つの機能、Word() (または Words()) 関数と日付と時刻を組み合わせます。 以下に、それぞれについて説明した投稿を示します。
数式エディタの機能を 1 つだけ学習する場合、Word() がその機能です。
JMPでの日付、時間、日時、期間の使用
Re: 文字列からさまざまな長さの数値を異なる列に抽出するポール - 私は新しい機能を学びました。 ソリューションの詳細で簡略化されたバージョンをありがとうございます。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する完璧です。説明とスクリーンショットをありがとうございます。 recode を使用することで、他のインスタンスで時間を節約できました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する[新しい値] ホット スポットの下にある [再コード化 - 数式列] を使用して、[詳細] - [セグメントの抽出] を選択します。 日、時、秒の保存された式が添付された抽出 d、sec、および jmp ファイルのスクリーン ショット。


Re: 文字列からさまざまな長さの数値を異なる列に抽出するこの例は、正規表現の使用方法を示しています。
Names Default To Here( 1 );
cell = {"0d 15h 47m 43m", "10d 10h 21m 54m", "0d 04h 07m 32m", "268d 06h 02m 33m"};
For( i = 1, i <= N Items( cell ), i++,
day = Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) );
Show( day );
);Re: 文字列からさまざまな長さの数値を異なる列に抽出するサンプルテーブルを添付しました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する正規表現の使用はどうですか:
当日:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
時間について:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
議事録:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
2 番目の場合:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
他の番号を実際にキャプチャする必要はありませんが、各番号はキャプチャ グループにあります。 これらを使用して単純化できます。
Num( Regex( :Duration, "(\d+)d\s\d+h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s(\d+)h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s(\d+)m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s\d+m\s(\d+)m", "\1" ) )