Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenIch habe eine Spalte namens Dauer mit Werten, die die Anzahl der Tage, Stunden, Minuten und Sekunden darstellen. Das letzte m steht für Sekunden.
Das typische Format wäre also: (0-365)d(0-24)h(0-60)m(0-60)m
Hier sind einige Beispiele.:
0d 15h 47m 43m
10 Tage 10 Stunden 21 Minuten 54 Minuten
0d 04h 07m 32m
268d 06h 02m 33m
Ich muss die Anzahl der Tage, Stunden, Minuten und Sekunden in verschiedenen Spalten extrahieren, damit ich Berechnungen durchführen kann.
Ich habe die Formel zum Extrahieren der Anzahl der Tage ausprobiert,
Words( :Duration, "d" )[1]
Zum Extrahieren der zweiten Zahl habe ich die Formel verwendet:
Substr( Item( 2, :Duration ), 1, 2 );
Extrahieren Sie auf die gleiche Weise die dritte und vierte Zahl mit 3 und 4 in der Item-Formel.
Um diese Zeichenfolgen in numerisch umzuwandeln, habe ich 4 weitere Spalten erstellt, sie kopiert und eingefügt und den Datentyp in numerisch geändert.
Ich verstehe, dass dies ein Umweg ist, um zum Ergebnis zu gelangen.
Ich habe mich gefragt, ob mir jemand mit einer effizienteren Methode helfen könnte.
DatentabelleSkripterstellungBetreff: Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten extrahierenvielen Dank für den Hinweis auf das Log. Ich habe dort das Ergebnis gesehen. Früher dachte ich, dass das Ergebnis in einem separaten Fenster angezeigt wird.
Betreff: Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten extrahierenMarkieren
Ich hatte den Eindruck, dass das Ergebnis in einem separaten Fenster angezeigt wird. Jetzt habe ich in das Protokoll geschaut – und ich habe dort das Ergebnis gesehen – so oft hatte ich das Skript ausgeführt.
Betreff: Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten extrahieren@txnelson ist richtig. Er hat Ihnen gezeigt, wie Sie es als separates Skript verwenden können. Dieser Ausdruck ist alles, was Sie für eine Spaltenformel benötigen:
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten@Mark_Bailey script ist eine eigenständige JSL.Sie führen es aus, indem Sie es in ein Skriptfenster einfügen und das Skript ausführen.Ich habe das getan und es hat großartig funktioniert und die folgenden Ergebnisse im JMP-Protokoll angezeigt
day = 0;
day = 10;
day = 0;
day = 268;
Betreff: Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten extrahierenMarkieren,
Ich habe versucht, Ihr Skript auf viele verschiedene Arten zu verwenden
a) indem Sie das Skript im Skripteditor verwenden und ausführen,
b) Erstellen einer Spalte mit dem Namen „Zelle“ und Eingeben der Liste der Elemente darin + Erstellen einer weiteren Spalte „Tag“ und Verwenden der „For-Schleife“ als Formel in dieser Spalte,
und andere Wege.
Ich erhalte eine Fehlermeldung.
Ich habe auch versucht, im Scripting-Index nach Hilfe zu suchen.
Aber ich bekomme das Script nicht zum Laufen.Ich bin neu in der Skripterstellung. Können Sie bitte helfen.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenSie haben bisher einige gute Lösungen gefunden, aber ich möchte darauf hinweisen, dass Sie mit der Verwendung von sehr nahe dran waren Wörter() Funktion.
Sie können mehr als ein Trennzeichen im letzten Argument der Words()-Funktion angeben, damit Sie dies tun könnten:
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
);
Im Protokoll:
/*:
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"};
Hier ist es im Formeleditor, zusammen mit der Funktionen In Days(), In Hours(), In Minutes() Um die numerischen Werte in die Anzahl der Sekunden in jeder dieser Einheiten umzuwandeln, um eine Dauer-Spalte zu erstellen.

Ich habe die Datentabelle auch hier angehängt.
Dieses Thema kombiniert zwei meiner Lieblingsfeatures, die Funktion Word() (oder Words()) und Datum und Uhrzeit. Hier sind Beiträge, die ich geschrieben habe, um jeden von ihnen zu erklären:
Wenn Sie nur eine Formel-Editor-Funktion lernen, ist Word() diejenige
Verwenden von Datumsangaben, Uhrzeiten, Datumszeiten und Dauer in JMP
Betreff: Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene Spalten extrahierenPaul: Ich habe eine neue Funktion gelernt. Vielen Dank für Ihre ausführliche und vereinfachte Version der Lösung.!
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenPerfekt. Vielen Dank für Ihre Beschreibung und Screenshots. Hat mir in anderen Fällen durch die Verwendung von Recode Zeit gespart.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenVerwenden Sie Umcodieren – Formelspalte – wählen Sie unter dem Hotspot „Neue Werte“ die Option „Erweitert“ – „Segment extrahieren“. Screenshots für Extrakt d, Sek und JMP-Datei mit gespeicherter Formel für Tag, Stunde, Sekunde angehängt.


Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenDieses Beispiel veranschaulicht die Verwendung regulärer Ausdrücke.
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 );
);Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenBeiliegende Mustertabelle.
Betreff: Extrahieren Sie Zahlen unterschiedlicher Länge aus einer Zeichenfolge in verschiedene SpaltenWie wäre es mit Regex:
Für den Tag:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
Für die Stunde:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
Für die Minute:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
Zum Zweiten:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
Jede Nummer befindet sich in einer Erfassungsgruppe, obwohl Sie die anderen nicht wirklich erfassen müssen. Damit könntest du es vereinfachen:
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" ) )