Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Hallo JMP-Community,
Einmal pro Woche importiere ich TXT-Daten mit einer Batteriespannungsspalte (mit dem Namen „V1“), wobei die Zeilenwerte „3,45 V“, „3,34 V“, „3,12 V“, „3,23 V“ usw. sein können. Ich verwende „Suchen und Ersetzen“ manuell, um den Buchstaben „V“ aus den Daten zu entfernen, und ändere dann manuell den Datentyp von „Zeichen“ in „Numerisch“. Ich schätze, ich verstehe nicht ganz, wie ich replacement() oder mumger() in meine Skripte einbinden soll, weil ich versucht habe, eine funktionierende JSL für diese einfache Aufgabe zu erstellen, aber daran scheiterte.
Betreff: Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Ich habe einen logischen Fehler in meinem Code gefunden.Unten finden Sie eine Beispieldatentabelle mit einem kleinen Skript, das die vorhandenen Werte konvertiert.
Names Default To Here( 1 );
dt = New Table( "Example",
add rows( 100 ),
New Column( "col1", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) ),
New Column( "col2", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) )
);
dt<<RUN formulas=""></RUN>
Betreff: Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Hallo Jim, dein Code hat nicht ganz funktioniert und ich konnte nicht herausfinden, warum. Ich habe einen Screenshot des JMP-Debuggers mit der Fehlermeldung und eine Teilmenge meiner Daten hochgeladen, falls Sie das Problem weiter in Angriff nehmen möchten. Ich wäre sehr an dieser Alternativlösung interessiert!

Betreff: Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Danke, Dan,
Ich konnte dies wie folgt in meinen Workflow integrieren:
Names Default To Here( 1 );
:Name( "V1" ) << Set Name( "orig V1" );
New Column( "V1",
Numeric,
"Continuous",
Format( "Fixed Dec", 6, 2 ),
Formula( Num( Word( 1, :orig V1, "V" ) ) )
);
Ich schätze die schnelle Antwort!
Betreff: Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Sehen Sie, ob so etwas funktionieren wird. Es wurde noch nicht vollständig getestet, sollte aber nahezu funktionieren
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( string, character );
For( theCol = 1, thecol <= N Items( colNames ), theCol++,
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Right( Column( dt, theCol )[theRow], 1 ) == "V",
Column( dt, theCol )[theRow] = Substr(
Column( dt, theCol )[theRow],
1,
Length( Column( dt, theCol )[theRow] ) - 1
)
)
)
);
If( Is Missing( Num( Column( dt, theCol )[1] ) ) == 0,
Column( dt, theCol ) << data type( numeric ) << modeling type( continuous )
);Betreff: Wie kann ich in JSL Code suchen und ersetzen, um Text aus einer Spalte zu entfernen und in das Zahlenformat zu konvertieren?Ich war schon immer ein großer Fan davon, die Lösung zuerst interaktiv zu erstellen und dann ein Skript zu erstellen. Ich weiß, dass es nicht immer möglich ist, aber man kann nah dran sein.
Beim Öffnen der Textdatei wird dieses Skript angezeigt (für mein Beispiel natürlich), das im Quellskript mit der JMP-Tabelle zu finden ist:
Open(
"C:\Testing.txt",
columns( New Column( "V1", Character, "Nominal" ) ),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
Sie können es je nach Bedarf für Ihren speziellen Fall ändern.
Um nun das V zu entfernen und in einen numerischen Wert umzuwandeln, würde ich dafür eine zweite Spalte erstellen. Dies ermöglicht eine Fehlerprüfung für den Fall, dass sich das Spannungsformat aus irgendeinem Grund ändert. Darüber hinaus ermöglicht es eine bessere Rückverfolgbarkeit der Daten. Ich habe eine Spalte mit dieser Formel erstellt: Num( Word( 1, :V1, "V" ) ). Dann habe ich mir das „Copy Table Script“ im Tabellenbereich angesehen und den zugehörigen Teil des Skripts herausgezogen, um die neue Spalte zu erstellen.
In JSL wäre das:
New Column( "Numeric V1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :V1, "V" ) ) )
)
Beides zusammenzufügen sollte Ihr Drehbuch sein.