Dieses Add-in erstellt eine JMP-Datentabelle aus einer Data Interchange Format- oder DIF-Datei. Der Datei Format entstand 1980 von Visicalc als Mechanismus zum Übertragen von Daten zwischen Tabellenkalkulationsprogrammen.
Im Beispielcode stelle ich vier Mechanismen zur Verfügung, um nach den erforderlichen Headern zu suchen, wobei jeweils nur einer aktiv ist.
Weitere Informationen zu Regex sehen @Craige_Hales ' Blogbeitrag und Einblicke in die Pat Match-Option finden Sie im JSL-Kochbuch .
Standardmäßig habe ich Option 2: Pat Match zur Fehlerprüfung implementiert.
Erforderliche Header-Elemente:
- Titel
- Vektor
- Tupel
- Daten
Header-Format, also Struktur des Header-Attributs
<< Attributname >>
<< Vektorzahl >> , << Numerischer Wert >>
<< "String-Wert" >>
Wo, |
<< Attributname >> ist ein Symbol/Token mit (normalerweise) 32 oder weniger Zeichen
<< Vektornummer >> ist 0, wenn die gesamte Datei
<< Numerischer Wert >> ist 0, sofern nicht anders angegeben
<< "String Value" >> ist \!"\!" (doppelte Anführungszeichen ohne Leerzeichen dazwischen), falls nicht verwendet
Optionale Kopfzeilenelemente: Bitte beachten Sie, dass diese optionalen Header während der Entwicklung des Add-Ins nicht getestet wurden
- Kommentar
- Etikett
- Größe
- Wahre Länge
- Einheiten
- Anzeigeeinheiten
DATEN:
<< Datentypindikator >>, << Numerischer Wert >>
<< "String-Wert" >>
Wo,
<< Datentypindikator >> ist einer von drei Werten -1, 0, 1
-1 --ist ein spezieller Datenwert
<< "String Value" >> = BOT oder EOD
0 --numeric vorzeichenbehaftete Dezimalzahl
<< Numerischer Wert >> = sind numerische Daten
<< „String Value“ >> = ist einer der Wertindikatoren (V, NA, ERROR, TRUE, FALSE)
1 --string Datenwert
<< Numerischer Wert >> = 0
<< "String Value" >> = String-Datenwert
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
)
);
);
Beispiel.DIF Die Datei wurde für die Entwicklung und den Test des Add-Ins verwendet.
Der Inhalt der Datei „sample.dif“ wird im angehängten Bild mit den erforderlichen Headern angezeigt.
File Contents of sample.difFile Contents of sample.difDateiinhalt von sample.dif
Das Add-in wurde durch den Community-Beitrag von inspiriert @JensRiege als er fragte, wie es geht Importieren Sie das .dif-Dateiformat in JMP Script .
Fragen oder Kommentare sind willkommen.
Prost,
Stan