Skript zum Suchen und ErsetzenIch verwende ein GCMS-Programm, das "gesättigt (####)" hinzufügt, wenn eine Spitzenflächenanzahl 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 "gesättigte ()" entfernt, die Zahl jedoch im numerischen, fortlaufenden 12,0-Format belässt.
SkriptingBetreff: Skript zum Suchen und ErsetzenInteraktiv ist es recht einfach, die Suchfunktion zu verwenden, um "(" und ")" global zu ersetzen.Anschließend können Sie mithilfe von Attribute standardisieren alle fraglichen Spalten auswählen und in ein numerisches, kontinuierliches Format ändern (Fixed Dec, 12,0).
Find ist verfügbar unter
Bearbeiten => Suchen => Suchen
Attribute standardisieren ist unter dem roten Dreieck im Spaltenbedienfeld auf der linken Seite der Datentabelle verfügbar.
Hier ist ein kleines Skript, das ebenfalls den Trick macht, aber mit einer großen Datentabelle kann es langsam sein
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 );
)
);Betreff: Skript zum Suchen und ErsetzenVielen Dank für das Skript, aber es scheint, dass ich nicht spezifisch genug war.Das Schreiben eines Skripts ist für mich sehr neu und ich nahm an, 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, "gesättigt (635403558)" in 635403558 umzuwandeln.Ich schätze Ihre Hilfe.
Betreff: Skript zum Suchen und ErsetzenDas Skript erwartet, dass das "(" das erste Zeichen und das ")" das letzte Zeichen ist.Ist es möglich, dass Leerzeichen am Anfang oder Ende stehen?
Probieren Sie diese Version des Skripts aus und prüfen 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 ErsetzenWenn ich es richtig verstehe, könnte dies eine Chance sein, es zu nutzen JMPs Mustervergleich (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 ErsetzenLeider ist nichts passiert, als ich das Skript ausgeführt habe.Ich habe einen Screenshot meiner Daten zusammen mit den Spaltenattributen beigefügt, falls dies hilfreich ist.Danke noch einmal!

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 );