Konvertieren einer Textzeichenfolge in eine DauerHi,
Ich habe Probleme beim Konvertieren eines Strings in einen Zeitraum (Dauer).
Eines der Probleme sind die Leerzeichen im String: Zwischen „days“ und „hours“ + number steht kein white space. Und es gibt einen Leerraum zwischen Minuten + Zahl.
| Aufnahmezeit |
| 9 Tage 21 Stunden 54 Minuten |
| 6 Tage 21 Stunden 29 Minuten |
Ich habe versucht, die Wörter zu ersetzen, um weiter voranzukommen, aber das scheint nicht zu funktionieren, wenn es keine Leerzeichen gibt.
Ich habe auch versucht, "Text zu Spalten" zu verwenden, aber das hat bei mir auch nicht funktioniert.
Br Julie
Betreff: Konvertieren einer Textzeichenfolge in eine DauerTage, Stunden, Minuten... vielleicht, vielleicht auch nicht. Wenn Sie sicher sind, dass sich das Muster der Datenquelle nicht ändert, können Sie Abkürzungen nehmen. Wenn sich das Quellmuster der Daten ändern könnte, möglicherweise durch Hinzufügen von Leerzeichen, wird \s* in Zukunft optionale Leerzeichen zulassen.
Keines dieser Beispiele wird wahrscheinlich mit einer zukünftigen Quelle umgehen, die Wochen hinzufügt; sie werden es wahrscheinlich stillschweigend ignorieren. Wenn Sie mit ^ und $ eine Übereinstimmung des Musters von Anfang bis Ende erzwingen, erhalten Sie wahrscheinlich einen fehlenden Wert, wenn in der Zukunft etwas Unerwartetes (Wochen) auftaucht.
Marks Ansatz wäre einfacher zu ändern, um Wochen zu bewältigen. Mein Ansatz wäre einfacher, ^ und $ hinzuzufügen, um auf etwas Unerwartetes zu testen.
Ich habe Marks Beispiel nicht ausgeführt, aber ich denke, Sie könnten Recht haben, dass das \D nicht benötigt wird.
Bearbeiten: In Marks Formel gibt es drei unabhängige Regex-Übereinstimmungen, und sie hängen von dem Wort ab, das den Ziffern folgt, um die richtigen Ziffern zu erhalten. In meiner Formel muss etwas den konstanten Text (Tage, Stunden, Minuten) überspringen. Die Verwendung der tatsächlichen Wörter erleichtert das Verständnis der Formel.
Betreff: Konvertieren einer Textzeichenfolge in eine DauerDanke - das hat funktioniert. Aber nur zum besseren Verständnis: Ist es überhaupt notwendig, die „Tage, Stunden, Minuten“ in die Formel einzubeziehen?
Warum brauchen Sie außerdem "\D+" und nicht nur "\d+"?
Betreff: Konvertieren einer Textzeichenfolge in eine DauerUnd eine leichte Variation
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"
)
)
)
)Betreff: Konvertieren einer Textzeichenfolge in eine DauerDieser Fall ist nicht so schlimm. Ich habe die Funktion Regex() verwendet. Hier ist die Spaltenformel:
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 )
Ich habe eines der Dauerformate für numerische Daten angewendet, um dieses Ergebnis zu erhalten:

Ich habe die geänderte Datentabelle für Ihre Überprüfung beigefügt.