Questo componente aggiuntivo creerà una tabella di dati JMP da un formato di interscambio dati o da un file DIF. Il formato del file è nato da Visicalc nel 1980 come meccanismo per trasferire dati tra programmi di fogli di calcolo.
Nel codice di esempio, fornisco 4 meccanismi per verificare le intestazioni richieste con una sola attiva alla volta.
Per ulteriori informazioni su Regex vedere @Craige_Hales ' post sul blog e per approfondimenti sull'opzione Pat Match vedere il Libro di cucina JSL .
Per impostazione predefinita, ho implementato l'opzione 2: Pat Match per il controllo degli errori.
Elementi di intestazione richiesti:
- Titolo
- Vettore
- Tuple
- Dati
Formato dell'intestazione, cioè struttura dell'attributo dell'intestazione
<< Nome attributo >>
<< Numero vettore >> , << Valore numerico >>
<< "Valore stringa" >>
Dove, |
<< Attribute_Name >> è un simbolo/token di (di solito) 32 o meno caratteri
<> è 0 se l'intero file
<< Valore numerico >> è 0 se non diversamente specificato
<< "Valore stringa" >> è \!"\!" (virgolette doppie senza spazi tra) se non utilizzato
Elementi di intestazione facoltativi: Si noti che queste intestazioni facoltative non sono state testate durante lo sviluppo del componente aggiuntivo
- Commento
- Etichetta
- Dimensione
- Lunghezza reale
- Unità
- Unità di visualizzazione
DATI:
<< Indicatore del tipo di dati >>, << Valore numerico >>
<< "Valore stringa" >>
Dove,
<< Indicatore del tipo di dati >> è uno dei tre valori -1, 0, 1
-1 --è un valore di dati speciale
<< "Valore stringa" >> = BOT o EOD
0 --numeric numero decimale con segno
<< Valore numerico >> = è un dato numerico
<< "String Value" >> = è uno degli indicatori di valore (V, NA, ERROR, TRUE, FALSE)
1 --string valore dati
<< Valore numerico >> = 0
<< "Valore stringa" >> = valore dati stringa
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
)
);
);
Campione.DIF file è stato utilizzato per lo sviluppo e il test del componente aggiuntivo.
Il contenuto del file sample.dif è mostrato nell'immagine allegata con le intestazioni richieste contenute.
File Contents of sample.difFile Contents of sample.difFile Contenuto di sample.dif
Il componente aggiuntivo è stato ispirato dal post della community di @JensRiege quando ha chiesto come Importa il formato di file .dif in JMP Script .
Domande o commenti sono incoraggiati.
Saluti,
Stan
6 stelle! (su 5)
Uso quotidianamente questo vecchio formato di file poiché disponiamo di alcuni sistemi software legacy.
Ha funzionato molto bene!
Grazie !!!
-Jens