Text aus String extrahierenHallo,
Wenn möglich, möchte ich einen bestimmten Text aus den Strings extrahieren:
\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hallo TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hallo TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hallo TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hallo YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hallo YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hallo TT-YYT (CTL1008.1)
und ich möchte die IDs von oben extrahieren:
CTL1083.1
CIL0858.1
CTL1077.1
CMA0851.1
CMS0499.1
CTL1078
CTLR1073
CTLR0999.1
CTL1008.1
Jede Hilfe geschätzt.
Danke,
Tomasz
SkriptingRe: Text aus String extrahierenVerwenden Sie die WORDS-Funktion mit ( und ) als Trennzeichen.Verwenden Sie das zweite Element in der zurückgegebenen Liste.Führen Sie den folgenden Code aus und überprüfen Sie die Ausgabe im Protokollfenster.
dt = New Table( "Test Words", Add Rows( 9 ),
New Column( "Column 1", Character, "Nominal",
Set Values(
{
"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
word_list = words(one_value, "()");
print(word_list[2]);
);Re: Text aus String extrahierenDie Lösung von @pmroz ist sehr robust, schön!
Ein etwas anderer Ansatz könnte darin bestehen, Formeln in der Datentabelle zu verwenden

Die Position des Starttrennzeichens könnte mit einem "Enthält"-Argument gefunden werden
Contains(:text, "(")
Die Position des Endbegrenzers könnte auf die gleiche Weise lokalisiert werden
Contains( :text, ")" )
Ein obskures, aber wirklich lustiges Argument, "munger", könnte verwendet werden, um die Zeichenfolge zwischen den Trennzeichenpositionen zu extrahieren.
In diesem Fall möchten wir die Zeichenfolge nach dem Trennzeichen, die vor dem Endzeichen endet, also wird 1 zum Anfang hinzugefügt und vom Ende abgezogen.
Die Funktion für munger verwendet in diesem Fall die Argumente, ganzer Text, wo beginnen soll, wie viele Zeichen zurückgegeben werden sollen. Munger kann auch einige andere interessante Dinge tun, wie zum Beispiel Suchen und Ersetzen.
Munger( :text, :start + 1, (:stop - :start) - 1 )
Das alles in eine Formel zu packen würde so aussehen
Munger(
:text,
Contains( :text, "(" ) + 1,
(Contains( :text, ")" ) - Contains( :text, "(" )) - 1
)
Re: Text aus String extrahierenich benutze SUBSTR für ähnliche Wirkung.
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
start = contains(one_value, "(") + 1;
end = contains(one_value, ")") - 1;
len = end - start + 1;
result = substr(one_value, start, len);
print(result);
);Re: Text aus String extrahierenFalls Sie sich für reguläre Ausdrücke interessieren...
Names Default to Here( 1 );
// make list of example original strings
sample = "\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)";
sample = Words( sample, "\!U000D" );
// Show( sample );
n = N Items( sample );
id = List();
// iterate over list and return target strings
For Each( { string }, sample,
If( Contains( string, ")" ),
Insert Into( id, Regex( string, "(.+\()(.+)(\).*)", "\2" ) ),
Insert Into( id, Regex( string, "(.+\()(.+)", "\2" ) )
);
);
Show( id );Re: Text aus String extrahierenIch mag die Funktion "Word()" für solche String-Extraktionen
Names Default To Here( 1 );
dt = New Table( "Test Words",
Add Rows( 9 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values(
{"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Print( Word( 2, dt:column 1[i], "()" ) )
);Re: Text aus String extrahieren@pmroz , Ihr Code sieht immer so viel weniger willkürlich aus als meiner ; )
Substring (substr) ist ein einfacherer Ansatz, ich kann einem guten Argument für Munger einfach nicht widerstehen.
Craig Hales hat wahrscheinlich einige noch effizientere Ansätze mit Musterabgleich. Ich bin sicher, es gibt bereits einige Beispiele auf den Community-Seiten oder seiner Blog-Seite.
Re: Text aus String extrahierenWow, viele Möglichkeiten, einen Laib Brot in JMP zu schneiden.
Re: Text aus String extrahierensehr schön, alle Vorschläge wirken magisch.
Ich habe den Munger in meinem Skript verwendet und funktioniert perfekt.
Vielen Dank
Tomasz