Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Alors l'ingénieur précédent est parti et je regarde certains de ses scripts qu'il a écrits pour nous aider avec les fichiers .dat. Il en a un qui analyse et formate les données dans une table de données, mais je pense que cela nécessite un peu plus de travail pour être plus convivial.
Le fichier .dat est un ensemble de données délimité par des tabulations avec un nombre de mesures démesuré. Je veux dire que la quantité et l'étiquette pour chaque mesure dans le fichier .dat varient d'un produit à l'autre. Comme un ensemble de fichiers peut avoir de S1 à S5, les autres peuvent être de S11 à S26, etc. Fondamentalement, les étiquettes et leur quantité changent avec chaque ensemble de données. Il semble que le script précédent explique tout cela.
Comment pourrais-je l'ajuster à la fin pour ensuite convertir les unités et ajouter "label (mm)" dans l'étiquette de colonne? Les mesures actuelles sont toutes en mils (1/1000 pouce).
conseiller? Je suis nouveau sur .jsl et j'essaie de comprendre tout ça.
J'ai joint des copies blanchies à la chaux si cela aide.

Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Tout d'abord, il ne faut jamais répéter le code. Si vous faites quelque chose plusieurs fois, c'est un bon signal pour créer une fonction. J'ai également inclus un extrait du code de Ian pour vous aider avec le truc Max.
Je n'ai pas débogué ceci avant de poster, mais cela devrait bien fonctionner pour vous.
// Créer une fonction de conversion de colonne
convertColonnes = Une fonction ({ PEMdata_all , Lettre , Unité , Conversion } ,
// Trouver les colonnes "X"
S_columns = {} ;
v = {} ;
pour ( je = 1 , je <= ncols ( PEMdata_all ) , je ++,
colname = colonne ( PEMdata_all , je ) << Obtenir le nom ;
Si ( ! est manquant ( regex ( colname , Lettre || ". *" )) ,
insérer dans ( S_columns , colname ) ;
v = v || colname << Obtenir des valeurs ;
) ) ;
// Ajouter une colonne VMax
vMax = Transposer ( VMax ( Transposer ( v ))) ;
PEMdata_all << Nouvelle colonne ( Lettre || "Max" , Numérique , Continu , Valeurs ( vMax )) ;
insérer dans ( S_columns , Lettre || "Max" ) ; // ajoute la colonne max pour qu'elle convertisse également
// Créer de nouvelles colonnes avec des conversions
pour ( je = 1 , je <= nitems ( S_columns ) , je ++,
Newcol = PEMdata_all << Nouvelle colonne ( S_columns [ je ] || "(" || Unité || ")" , Numérique , Continu ,
Formule ( Colonne ( PEMdata_all , S_columns [ je ]) [] * Conversion )) ;
// éventuellement supprimer les colonnes de mils précédentes
Newcol << Supprimer la formule ;
PEMdata_all << Supprimer des colonnes ( Colonne ( PEMdata_all , S_columns [ je ]) ) ;
) ;
) ;
// Parcourir les colonnes d'intérêt
Des lettres = { "S" , "CY" } ;
Unité = "pouce" ;
Conversion = 1000 ;
Pour ( je = 1 , je <= nitems ( Des lettres ) , je ++,
convertColonnes ( PEMdata_all , Des lettres [ je ] , Unité , Conversion ) ;
) ;
Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Voici un exemple pour vous donner quelques idées:
NamesDefaultToHere ( 1 ) ;
// Crée un tableau avec une dizaine de colonnes
v = J ( 100 , dix , AléatoireNormal ()) ;
dt = AsTable ( v ) ;
// Crée une nouvelle colonne dans dt contenant la valeur maximale des colonnes 4, 5 et 6
v = : Col4 << getValues ;
v = v || ( : Col5 << getValues ) ;
v = v || ( : Col6 << getValues ) ;
vMax = Transposer ( VMax ( Transposer ( v ))) ;
dt << NewColumn ( "Maximum de 3, 4 et 5" , Numérique , Continu , Valeurs ( vMax )) ;
Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Merci msharp,
Oui, tous les S vont ensemble, les CY, les T, les CFW, etc. Je viens de finir par répéter la structure pour chaque type. Peut-être pas le plus élégant, mais ça marche.
Des astuces pour ajouter ensuite plus de colonnes qui calculent le maximum de chaque groupe? Comme une nouvelle colonne pour le maximum de CY pour chaque ligne?
À partir de là, je pourrais essayer de le programmer pour afficher une nouvelle fenêtre de résumé indiquant la mesure dans la colonne 1 (CY, T, S, CFW), puis le nombre, moyenne, USL et CPK, espérons-le.
Des conseils?
Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Dans le texte rouge ci-dessus, vous avez indiqué que vous ne vouliez que les colonnes S. Je suppose que c'était un malentendu de ma part.
Options: En supposant que vous souhaitiez effectuer la même conversion, vous pouvez simplement parcourir toutes les colonnes après les quatre premières colonnes d'étiquettes.
conv_columns = {} ;
pour ( je = 5 , je <= ncols ( PEMdata_all ) , je ++,
colname = colonne (PEMdata_all, i) << Obtenir le nom;
insérer dans (conv _colonnes , colname )
) ;
Ou vous pouvez changer la regex:
"CY. *" Cela semblerait fonctionner si toutes les colonnes C intéressantes commencent réellement par CY.
"\ w + \ d \ d" correspondrait à au moins un caractère mot suivi immédiatement d'au moins deux caractères numériques. Cela correspondrait à la fois à "CY22" et à "S12" par exemple, mais pas à "Carrier"
Je ne vais pas entrer dans les détails, mais il existe de nombreuses façons d'analyser les chaînes. Les expressions régulières est un sujet qui peut et a rempli de nombreux livres. Cela étant dit, les bases peuvent être apprises rapidement et prendre une heure pour regarder une vidéo youtube ou lire la section Regex du Guide de script JSL vaudrait la peine si vous envisagez de coder de manière assez approfondie. Les expressions régulières étant utilisées dans de nombreux langages de programmation, les connaissances sont transférables.
Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Impressionnant! Cela fonctionne exactement ce que je cherchais. J'ai ajouté une section répétée pour convertir les colonnes "C". À votre santé!!
Cependant, le seul problème qui reste est qu'il récupère l'une des autres colonnes "Nom" (Carrier #). Quelle serait la ligne de script pour rechercher "C. *" mais exclure "Carrier #"?
Re: Aide avec l'analyse du fichier .dat ambigu? convertir des unités, ajouter des étiquettes?Bien que le code de votre ancien collègue semble bon, il est mal commenté. Plutôt que de perdre mon temps à essayer de comprendre, j’ai simplement ajouté la fonctionnalité que vous recherchiez à la fin. Il suffit de coller le code ci-dessous à la fin.
De toute façon, c'est une meilleure méthode de programmation puisqu'il est toujours préférable de séparer la programmation fonctionnelle. Un code à analyser, un code à convertir, etc. Garde le code propre, plus facile à déboguer, à refactoriser, à lire, etc.
Ce code (1) trouve toutes les colonnes qui commencent par "S"
(2) ajoute une nouvelle colonne convertissant la colonne précédente en pouces et fixant l’étiquette "(pouces)" (pouvant facilement être convertie en (mm).
(3) supprime les colonnes de mils. Vous pouvez simplement supprimer les deux dernières lignes de code si vous souhaitez les conserver.
// Portion ajoutée
// Trouver les colonnes S
S_columns = {} ;
pour ( je = 1 , je <= ncols ( PEMdata_all ) , je ++,
colname = colonne ( PEMdata_all , je ) << Obtenir le nom ;
Si ( ! est manquant ( regex ( colname , "S. *" )) ,
insérer dans ( S_columns , colname )
)
) ;
// Créer de nouvelles colonnes avec des conversions
pour ( je = 1 , je <= nitems ( S_columns ) , je ++,
Newcol = PEMdata_all << Nouvelle colonne ( S_columns [ je ] || "(pouces)" , Numérique , Continu ,
Formule ( Colonne ( PEMdata_all , S_columns [ je ]) [] * 1000 ));
// éventuellement supprimer les colonnes de mils précédentes
Newcol << Supprimer la formule ;
PEMdata_all << Supprimer des colonnes ( Colonne ( PEMdata_all , S_columns [ je ]) ) ;
) ;