Este complemento creará una tabla de datos JMP a partir de un formato de intercambio de datos o un archivo DIF. los formato de archivo se originó en Visicalc en 1980 como un mecanismo para transferir datos entre programas de hoja de cálculo.
En el código de ejemplo, proporciono 4 mecanismos para verificar los encabezados requeridos con solo uno activo a la vez.
Para información adicional sobre Regex ver @Craige_Hales 'blog y para obtener información sobre la opción Pat Match, consulte la Libro de cocina de JSL .
De forma predeterminada, he implementado la Opción 2: Pat Match para la comprobación de errores.
Artículos de encabezado requeridos:
- Título
- Vector
- Tuplas
- Datos
Formato de encabezado, es decir, estructura del atributo de encabezado
<< Nombre del atributo >>
<< Número de vector >>, << Valor numérico >>
<< "Valor de cadena" >>
Donde, |
<< Nombre del atributo >> es un símbolo / token de (generalmente) 32 o menos caracteres
<< Número de vector >> es 0 si el archivo completo
<< Valor numérico >> es 0 a menos que se especifique lo contrario
<< "Valor de cadena" >> es \! "\!" (comillas dobles sin espacio entre ellas) si no se usa
Elementos de encabezado opcionales: Tenga en cuenta que estos encabezados opcionales no se probaron durante el desarrollo del complemento
- Comentario
- Etiqueta
- tamaño
- Trueltenidad
- Unidades
- DispalyUnits
DATOS:
<< Indicador de tipo de datos >>, << Valor numérico >>
<< "Valor de cadena" >>
Dónde,
<< Indicador de tipo de datos >> es uno de los tres valores -1, 0, 1
-1 --es un valor de datos especial
<< "Valor de cadena" >> = BOT o EOD
0 --Número numérico con signo
<< Valor numérico >> = es datos numéricos
<< "Valor de cadena" >> = es uno de los indicadores de valor (V, NA, ERROR, VERDADERO, FALSO)
1 - valor de datos de cadena
<< Valor numérico >> = 0
<< "Valor de cadena" >> = valor de datos de cadena
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
)
);
);
Muestra.DIF El archivo se usó para el desarrollo y prueba del complemento.
El contenido del archivo sample.dif se muestra en la imagen adjunta con los encabezados necesarios contenidos.
File Contents of sample.difContenido del archivo de sample.dif
El complemento fue inspirado por la publicación de la comunidad de @JensRiege cuando el pregunto como Importar formato de archivo .dif en Script JMP .
Se alientan preguntas o comentarios.
aclamaciones,
Stan