テキスト文字列をデュレーションに変換するやあ、
文字列を期間 (期間) に変換する際に問題があります。
問題の 1 つは、文字列内の空白です。"日" と "時間" + 数値の間に空白はありません。 また、分 + 数字の間に空白があります。
単語を代用してさらに先に進めようとしましたが、空白がない場合は機能しないようです。
「テキストから列へ」も使用しようとしましたが、それもうまくいきませんでした。
ブラ・ジュリー
Re: 文字列をデュレーションに変換する日、時間、分... たぶん、そうでないかもしれません。 データ ソースのパターンが変わらないことが確実な場合は、近道をすることができます。 データのソース パターンが変更される可能性があり、おそらく空白を追加する可能性がある場合、\s* は将来的にオプションの空白を許可します。
これらの例はどちらも、数週間追加される将来のソースを処理する可能性は低いです。彼らはおそらくそれを黙って無視するでしょう。 ^ と $ を使用して、パターンを最初から最後まで強制的に一致させた場合、将来 (数週間) 予期しない何かが発生した場合に、欠損値が得られる可能性があります。
マークのアプローチは、週を処理するために変更する方が簡単です。 私のアプローチは、予期しない何かをテストするために ^ と $ を追加する方が簡単です。
私は Mark の例を実行しませんでしたが、\D は必要ないというあなたの意見は正しいと思います。
編集: マークの式には 3 つの独立した正規表現の一致があり、それらは数字に続く単語に依存して正しい数字を取得します。 私の数式では、一定のテキスト (日、時間、分) をスキップする必要があります。 実際の単語を使用すると、式が理解しやすくなります。
Re: 文字列をデュレーションに変換するありがとう - それはうまくいきました。 ただし、これをよりよく理解するために、式に「日、時間、分」を含める必要さえありますか?
また、「\d+」だけでなく「\D+」が必要なのはなぜですか?
Re: 文字列をデュレーションに変換するそしてちょっとしたバリエーション
New Table( "Rec_time",
Add Rows( 8 ),
New Column( "Recording time",
Character,
"Nominal",
Set Values(
{"9days21hours54minutes", " 6 days 21 hours 29 minutes",
"2days 21 hours 24 minutes", "13days 20hours04minutes",
" 9 days 21hours 54 minutes", "9days 21hours 54 minutes",
"9days 21hours 54 minutes", "6days 20hours 39 minutes"}
),
Set Display Width( 240 )
),
New Column( "data",
Numeric,
"Nominal",
Format( ":day:hr:m", 14 ),
Input Format( ":day:hr:m" ),
Formula(
Informat(
Regex(
:Recording time,
"(\d+)\s*days\s*(\d+)\s*hours\s*(\d+)\s*minutes",
":\1:\2:\3"
),
":day:hr:m"
)
)
)
)Re: 文字列をデュレーションに変換するこのケースも悪くない。 Regex() 関数を使用しました。 列の式は次のとおりです。
Num( Regex( :Recording time, "(\d+)day", "\1" ) ) * In Days( 1 )
+Num( Regex( :Recording time, "\D+(\d+)hour", "\1" ) ) * In Hours( 1 )
+Num( Regex( :Recording time, "\D+(\d+) minute", "\1" ) ) * In Minutes( 1 )
この結果を得るために、数値データに Duration 形式の 1 つを適用しました。

レビュー用に修正したデータ表を添付しました。