Ce complément créera une table de données JMP à partir d'un fichier Data Interchange Format ou DIF. Le format de fichier est né de Visicalc dans les années 1980 en tant que mécanisme de transfert de données entre des tableurs.
Dans l'exemple de code, je fournis 4 mécanismes pour vérifier les en-têtes requis avec un seul actif à la fois.
Pour plus d'informations sur Regex voir @Craige_Hales ' article de blog et pour en savoir plus sur l'option Pat Match, consultez le Livre de cuisine JSL .
Par défaut, j'ai implémenté l'option 2 : Pat Match pour la vérification des erreurs.
Éléments d'en-tête requis :
- Titre
- Vecteur
- Tuples
- Données
Format d'en-tête, c'est-à-dire structure de l'attribut d'en-tête
<< Nom d'attribut >>
<< Numéro de vecteur >> , << Valeur numérique >>
<< "Valeur de chaîne" >>
Où, |
<< Attribute_Name >> est un symbole/token de (généralement) 32 caractères ou moins
<< Numéro de vecteur >> est 0 si le fichier entier
<< Valeur numérique >> est 0 sauf indication contraire
<< "Valeur de chaîne" >> est \!"\!" (guillemet double sans espace entre) si non utilisé
Éléments d'en-tête facultatifs : Veuillez noter que ces en-têtes facultatifs n'ont pas été testés lors du développement du complément
- Commentaire
- Étiquette
- Taille
- Longueur réelle
- Unités
- Unités d'affichage
DONNÉES:
<< Indicateur de type de données >>, << Valeur numérique >>
<< "Valeur de chaîne" >>
Où,
<< Indicateur de type de données >> est l'une des trois valeurs -1, 0, 1
-1 --est une valeur de données spéciale
<< "Valeur chaîne" >> = BOT ou EOD
0 --numeric nombre décimal signé
<< Valeur numérique >> = est une donnée numérique
<< "String Value" >> = est l'un des indicateurs de valeur (V, NA, ERROR, TRUE, FALSE)
1 --string valeur de données
<< Valeur numérique >> = 0
<< "Valeur de chaîne" >> = valeur de données de chaîne
errorhdrchkExpr = Expr(
regex_hdrs = "(TABLE|VECTORS|TUPLES|DATA)";
matrix_hdrs = { "TABLE", "VECTORS", "TUPLES", "DATA" };
rqd_hdrs = { TABLE, VECTORS, TUPLES, DATA };
// Option 1: Find match using Regex with check for required headers
thematch = Regex( lines, regex_hdrs );
If( IsMissing(thematch),
errnum_desc = "Error: A required header is missing";
errhdrnum = 0;
Break();
,
errhdrnum = 1
);
// Option 2: Find specific match using Pat Match with check for required headers
err_List = {};
For( e = 1, e <= Nitems( matrix_hdrs ), e++,
thematch = patMatch( txtfile, matrix_hdrs[e] );
If( thematch == 0,
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", matrix_hdrs[e], " is missing.");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
// Option 3: Find specific match using LOC with check for required headers
err_List = {};
For ( e = 1, e <= Nitems( rqd_hdrs ), e++,
If( Loc( {lines}, rqd_hdrs[e] ) != [1],
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", rqd_hdrs[e], " is missing");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
// Option 4: Find specific match using Contains with check for required headers
err_List = {};
For ( e = 1, e <= Nitems( rqd_hdrs ), e++,
If( Contains( txtfile, rqd_hdrs[e] ) == 0,
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", rqd_hdrs[e], " is missing");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
);
Exemple.DIF a été utilisé pour le développement et le test du complément.
Le contenu du fichier sample.dif est affiché dans l'image jointe avec les en-têtes requis contenus.
File Contents of sample.difFile Contents of sample.difContenu du fichier de sample.dif
Le complément a été inspiré par le message de la communauté de @JensRiege quand il a demandé comment Importer le format de fichier .dif dans JMP Script .
Les questions ou les commentaires sont encouragés.
acclamations,
Stan