diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLBonjour,
Je dois lire le tableau existant et trouver la colonne qui m'intéresse [disons que le nom de la colonne est « données »].
la colonne "data" est numérique avec des "points" délimités et a la même longueur.
Mon objectif est d'ouvrir ce tableau, de lire la colonne "data", de supprimer le "point" et de créer de nouvelles colonnes [selon la longueur de la valeur] et chaque colonne contient chaque valeur.
Tableau d'origine :
données
------
123.56.8.342
431.02.0.567
318.00.1.816
.....
production attendue:
données c1 c2 c3 c4 c5 c6 c7 c8 c9
-------------------------------------------------- ----------------------------
123.56.8.342 1 2 3 5 6 8 3 4 2
431.02.0.567 4 3 1 0 2 0 5 6 7
318.00.1.816 3 1 8 0 0 1 8 1 6
Lors de ma première tentative [trial1.jmp], où j'ai 2 boucles for [boucle interne pour créer des colonnes et autre boucle pour le nombre de lignes], il crée plus de colonnes [c'est-à-dire la largeur des données lues * non, des lignes] .
lors de ma deuxième tentative [trail2.jmp], j'obtiens le bon nombre de colonnes, mais les valeurs sont statiques.
ci-joint mon jsl.
J'apprécie l'aide, en brûlant l'huile de minuit là-dessus 
Merci,
David
Personnalisation de masseIngénierie Qualité et ProcédésRe : diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLLes deux méthodes présentent des avantages. La méthode de formule permettra l'ajout de nouvelles lignes et la modification des valeurs de date, et les colonnes c1....cn s'ajusteront automatiquement. L'avantage de définir chaque valeur fournira des valeurs statiques, ce qui peut s'avérer plus efficace car les formules n'ont pas besoin d'être exécutées plusieurs fois.Re : diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLMerci Jim.
vous avez une solution élégante.
sur la base de la méthode que vous proposez, j'ai remarqué que le nom du col ne continue pas, [c.-à-d. ignore le Col # chaque fois que "point" est rencontré] ; un petit massage des noms de colonnes est nécessaire [dont j'ai pris soin].
Question:
Suggérez-vous que la colonne ait une formule et utilise eval/substitute ou de le faire avec « définir chaque valeur » comme Jamo l'a suggéré du point de vue des performances ?
Merci,
David
Re : diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLMerci Jamo de m'avoir fait savoir ce qui me manquait. Je savais que j'étais proche 
je ne connais pas la fonction intégrée "définir chaque valeur".
ouais, tout fonctionne !
Merci,
David
Re : diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLVoici comment je réaliserais votre demande.La fonction Substitute() permet à la formule d'avoir la valeur réelle de la variable "i" dans la formule plutôt qu'une référence à la variable "i"
Names Default To Here( 1 );
dt = Current Data Table();
col = Column( dt, "DATA" );
colLength = Length( col[1] );
For( i = 1, i <= colLength, i++,
If( Substr( col[1], i, 1 ) != ".",
Eval(
Substitute(
Expr(
dt << New Column( "c" || Char( i ), Numeric, Continous, Formula( Num( Substr( :data, __i__, 1 ) ) ) )
),
Expr( __i__ ), i,
)
)
)
);Re : diviser une colonne et créer plusieurs multiples basés sur la division à l'aide de JSLJ'ai seulement vérifié la version 2 de .jsl et elle était assez proche.
J'ai joint une version modifiée.
J'ai modifié principalement la partie boucle. Il existe très probablement un moyen de gérer sans Eval(Parse()) avec des expressions mais j'ai opté pour cette solution cette fois. Vous utilisiez les données de la variable clean_DATA qui restent les mêmes pour toutes les lignes. De plus, si vous avez besoin de formules, vous devrez utiliser Eval(Parse()) (ou des expressions ?) pour que les formules continuent de fonctionner dans la table de données. Si aucune formule n'est nécessaire, j'opterais pour << Définir chaque valeur au lieu de Formule.
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
Eval(Parse("dt << New Column(\!"c\!" || Char(i),Numeric, Continous,
Formula(Num(Substr(Regex(:data, \!"\D\!", \!"\!", GLOBALREPLACE ), "||char(i)||", 1 )));
)));")); // put 1 bit in each column
);Avec << Set Each Value, la boucle for ressemblerait à ceci :
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
dt << New Column("c" || Char(i),Numeric, Continous,
<< Set Each Value(Num(Substr(Regex(:data, "\D", "", GLOBALREPLACE ), i, 1 )));
)
); // put 1 bit in each column
Modifier:
Bon article sur l'utilisation d'Eval Insert, Eval Expr, Parse et Substitute avec des formules https://community.jmp.com/t5/JSL-Cookbook/Insert-one-expression-into-another-using-Eval-Insert-Eval-Expr/ta-p/48998