Comment puis-je coder rechercher et remplacer dans JSL, pour supprimer du texte d'une colonne et convertir au format numérique.Bonjour la communauté JMP,
Une fois par semaine, j'importe des données .txt avec une colonne de tension de batterie (nommée "V1") où les valeurs de ligne peuvent être "3.45V", "3.34V", "3.12V", "3.23V", etc. J'utilise Rechercher et remplacer manuellement pour supprimer la lettre "V" des données, puis je modifie manuellement le type de données de Caractère à Numérique. Je suppose que je ne comprends pas très bien comment inclure substitut() ou mumger() dans mes scripts car j'ai essayé et échoué à créer un JSL fonctionnel pour cette tâche simple.
Re : Comment puis-je coder rechercher et remplacer dans JSL, pour supprimer du texte d'une colonne et convertir au format numérique.J'ai trouvé une erreur de logique dans mon code.Vous trouverez ci-dessous un exemple de tableau de données avec un petit script qui convertit les valeurs en place.
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>
Re : Comment puis-je coder rechercher et remplacer dans JSL, pour supprimer du texte d'une colonne et convertir au format numérique.Salut Jim, votre code n'a pas tout à fait fonctionné, et je ne pouvais pas comprendre pourquoi. J'ai téléchargé une capture d'écran du débogueur de JMP avec le message d'erreur et un sous-ensemble de mes données si vous souhaitez continuer à vous attaquer à ce problème. Je serais très intéressé par cette solution alternative !

Re : Comment puis-je coder la recherche et le remplacement dans JSL, pour supprimer le texte d'une colonne et le convertir au format numérique.Merci Dan,
J'ai pu intégrer cela dans mon flux de travail en tant que :
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" ) ) )
);
J'apprécie la réponse rapide!
Re : Comment puis-je coder rechercher et remplacer dans JSL, pour supprimer du texte d'une colonne et convertir au format numérique.Voyez si quelque chose comme ça fonctionnera ...... il n'a pas été entièrement testé, mais il devrait être sur le point de fonctionner
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 )
);Re : Comment puis-je coder la recherche et le remplacement dans JSL, pour supprimer le texte d'une colonne et le convertir au format numérique.J'ai toujours été un grand fan de la production interactive de la solution d'abord, puis du script. Je sais que ce n'est pas toujours possible, mais vous pouvez vous en approcher.
L'ouverture du fichier texte donne ce script (pour mon exemple, bien sûr) trouvé dans le script Source avec la table JMP :
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" )
)
)
Vous pouvez modifier au besoin pour votre cas spécifique.
Maintenant, pour supprimer le V et convertir en numérique, je créerais une deuxième colonne pour cela. Cela permet de vérifier les erreurs au cas où le format de tension change, pour une raison quelconque. De plus, il offre une meilleure traçabilité des données. J'ai créé une colonne avec cette formule : Num( Word( 1, :V1, "V" ) ). J'ai ensuite regardé le "Copier le script du tableau" trouvé dans le panneau du tableau et j'ai extrait la partie associée du script pour créer la nouvelle colonne.
En JSL, ce serait:
New Column( "Numeric V1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :V1, "V" ) ) )
)
Réunir les deux devrait être votre script.