Skript zum Suchen und ErsetzenIch verwende ein GCMS-Programm, das „saturated (####)“ hinzufügt, wenn eine Peakflächenzahl gesättigt ist.Nachdem ich diese Ergebnisse aus Excel in eine JMP-Datentabelle exportiert habe, möchte ich ein Skript ausführen, das diese Vorkommen findet und das „saturated()“ entfernt, die Zahl aber im numerischen, fortlaufenden 12,0-Format belässt.
MassenanpassungErgebnisse teilen und kommunizierenBetreff: Skript zum Suchen und ErsetzenDer Code, den ich oben angegeben habe, schreibt nur in die JMP-Protokoll . Sieht aus wie @txnelson hat Ihnen bereits erklärt, wie Sie mit der Spalte „Fläche“ umgehen. Wenn Sie möchten, können Sie eine Kombination aus dem Mustervergleichscode und seiner JSL verwenden.
Bei all diesen Dingen kommt es darauf an, was Sie mit Sicherheit über die Regelmäßigkeit der Eingabe annehmen können. Während der Mustervergleichsansatz (etwas) allgemeiner ist (und leicht allgemeiner gestaltet werden könnte), spielt dies in Ihrem Fall möglicherweise keine Rolle.
Betreff: Skript zum Suchen und ErsetzenVersuchen Sie dies in Ihrer Bereichsspalte
Names Default To Here( 1 );
dt = Current Data Table();
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( k = 1, k <= N Rows( dt ), k++,
If( Contains( :Area[k], "(" ),
:Area[k] = Word( 2, :Area[k], "()" )
)
);
:Area << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );Betreff: Skript zum Suchen und ErsetzenLeider passierte nichts, als ich das Skript ausführte.Ich habe einen Screenshot meiner Daten zusammen mit den Spaltenattributen beigefügt, falls das hilft.Danke noch einmal!

Betreff: Skript zum Suchen und ErsetzenWenn ich das richtig verstehe, könnte dies eine Chance sein, sie zu nutzen Mustervergleich von JMP (Dank an @Craige_Hales 


NamesDefaultToHere(1);
// Define a function
removeSaturated =
Function({inStr}, {Default Local},
// A pattern that will match a span of digits, with or without a leading '-'
digits = (""|"-") + patSpan("0123456789");
// Put the match into 'found' (might be identical to 'inStr')
patMatch(inStr, digits >? found);
// Return 'found' as a number
Num(found);
);
// Try it out
Print(removeSaturated("saturated( 635403558 )"));
Print(removeSaturated("saturated(635403558)"));
Print(removeSaturated("635403558"));
Print(removeSaturated("635403"));
Print(removeSaturated("-635403"));
Print(removeSaturated("saturated( -635403 )"));
Betreff: Skript zum Suchen und ErsetzenDas Skript erwartet, dass „(“ das erste Zeichen und „)“ das letzte Zeichen ist.Ist es möglich, dass am Anfang oder am Ende Leerzeichen stehen?
Probieren Sie diese Version des Skripts aus und sehen Sie, ob es hilft
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 1, i <= N Items( colList ), i++,
If( Left( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == "(" & Right( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Trim( Column( dt, colLIst[i] ) )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Trim( Column( dt, colList[i] )[k] ), 2 )
);
If( Right( Trim( Column( dt, colList[i] )[k] ), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );
)
);Betreff: Skript zum Suchen und ErsetzenVielen Dank für das Skript, aber es scheint, dass ich nicht spezifisch genug war.Das Schreiben von Drehbüchern ist für mich sehr neu und ich ging davon aus, dass die Länge der Nummer keine Rolle spielt.Ich vermute, das war falsch.Ich habe mit dem Skript herumgespielt, konnte es aber nicht dazu bringen, „saturated( 635403558 )“ in 635403558 umzuwandeln.Ich schätze Ihre Hilfe.
Betreff: Skript zum Suchen und ErsetzenInteraktiv ist es ganz einfach, die Suchfunktion zu verwenden, um eine globale Ersetzung von „(“ und „)“ durchzuführen.Anschließend können Sie mithilfe von „Attribute standardisieren“ alle betreffenden Spalten auswählen und sie in ein numerisches, fortlaufendes Format ändern (Fester Dez., 12,0).
Find ist verfügbar unter
Bearbeiten=>Suchen=>Suchen
Die Option „Attribute standardisieren“ ist unter dem roten Dreieck im Spaltenbereich auf der linken Seite der Datentabelle verfügbar.
Hier ist ein kleines Skript, das ebenfalls funktioniert, aber bei einer großen Datentabelle möglicherweise langsam ist
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 3, i <= N Items( colList ), i++,
If( Left( char(Column( dt, colList[i] )[1]), 1 ) == "(" & Right( char(Column( dt, colList[i] )[1]), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Column( dt, colLIst[i] )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Column( dt, colList[i] )[k] ,
2)
);
If( Right( (Column( dt, colList[i] )[k]), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) <<
Format( "Fixed Dec", 12, 0 );
)
);