¿Ayuda con el análisis de archivo .dat ambiguo? ¿Convertir unidades, agregar etiquetas?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Así que el ingeniero anterior se fue y estoy revisando algunos de sus guiones que escribió para ayudarnos con los archivos .dat. Tiene uno que analiza y da formato a los datos en una tabla de datos, pero creo que se necesita un poco más de trabajo para que sea más fácil de usar.
El archivo .dat es un conjunto de datos delineados por tabulaciones con una cantidad ambigua de mediciones. Me refiero a que la cantidad y la etiqueta para cada medida en el .dat cambian de producto a producto. Al igual que un conjunto de archivos puede tener S1 a S5, otros pueden ser S11 a S26, etc. Básicamente, las etiquetas y la cantidad de etiquetas cambian con cada conjunto de datos. Parece que las cuentas de script anteriores para todo esto.
¿Cómo lo ajustaría al final para luego convertir las unidades y agregar "etiqueta (mm)" en la etiqueta de la columna? Las medidas actuales son todas en mils (1/1000 pulgada).
¿asesorar? Soy nuevo en .jsl y estoy tratando de resolver todo esto.
Adjunto algunas copias lavadas en blanco si eso ayuda.

Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?En primer lugar, uno nunca debe repetir el código. Si va a hacer algo varias veces, esta es una buena señal para crear una función. También incluí un fragmento del código de Ian para ayudarte con la cosa de Max también.
No corregí esto antes de publicar, pero debería funcionar bien para ti.
// Crear una función de conversión de columna
convertirColumnas = Función ({ PEMdata_all , Carta , Unidad , Conversión } ,
// Buscar columnas "X"
S_columns = {} ;
v = {} ;
para ( yo = 1 , yo <= ncols ( PEMdata_all ) , yo ++,
colname = columna ( PEMdata_all , yo ) << Obtener nombre ;
Si ( ! Está perdido ( expresiones regulares ( colname , Carta || ". *" )) ,
insertar en ( S_columns , colname ) ;
v = v || colname << Obtener valores ;
) ) ;
// Añadir columna VMax
vMax = Transponer ( VMax ( Transponer ( v ))) ;
PEMdata_all << Nueva Columna ( Carta || "Max" , Numérico , Continuo , Valores ( vMax )) ;
insertar en ( S_columns , Carta || "Max" ) ; // agregar la columna max para que también se convierta
// Crear nuevas columnas con conversiones
para ( yo = 1 , yo <= Nitems ( S_columns ) , yo ++,
Newcol = PEMdata_all << Nueva Columna ( S_columns El yo ] || "(" || Unidad || ")" , Numérico , Continuo ,
Fórmula ( Columna ( PEMdata_all , S_columns El yo ]) [] * Conversión )) ;
// Opcionalmente eliminar columnas de mils anteriores
Newcol << Eliminar fórmula ;
PEMdata_all << Eliminar columnas ( Columna ( PEMdata_all , S_columns El yo ]) ) ;
) ;
) ;
// Ejecutar a través de columnas de interés
Letras = { "S" , "CY" } ;
Unidad = "pulgada" ;
Conversión = 1000 ;
por ( yo = 1 , yo <= Nitems ( Letras ) , yo ++,
convertirColumnas ( PEMdata_all , Letras El yo ] , Unidad , Conversión ) ;
) ;
Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?Aquí hay un ejemplo para darte algunas ideas:
NombresDefaultToHere ( 1 ) ;
// Hacer una tabla con unas 10 columnas.
v = J ( 100 , 10 , RandomNormal ()) ;
dt = Asable ( v ) ;
// Crear una nueva columna en dt que contenga el valor máximo de solo las columnas 4, 5 y 6
v = : Col4 << getValues ;
v = v || ( : Col5 << getValues ) ;
v = v || ( : Col6 << getValues ) ;
vMax = Transponer ( VMax ( Transponer ( v ))) ;
dt << Nueva Columna ( "Max de 3, 4 y 5" , Numérico , Continuo , Valores ( vMax )) ;
Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?Gracias msharp,
Sí, todas las S van juntas, las CY, las T, las CFW, etc. Acabo de terminar repitiendo la estructura para cada tipo. Quizás no sea el más elegante, pero funciona.
¿Algún consejo sobre cómo agregar más columnas que calculen el máximo de cada grupo? ¿Te gusta una nueva columna para el máximo de los CY para cada fila?
A partir de ahí, podría intentar programarlo para que aparezca una nueva ventana de resumen que muestre la medición en la Columna 1 (CY, T, S, CFW), y luego el conteo, la media, la USL y la CPK, con suerte.
¿Algun consejo?
Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?En el texto rojo anterior mencionaste que solo querías las columnas S. Supongo que fue un malentendido por mi parte.
Opciones: Suponiendo que desea realizar la misma conversión, simplemente puede ejecutar todas las columnas después de las primeras cuatro columnas de etiquetas.
conv_columns = {} ;
para ( yo = 5 , yo <= ncols ( PEMdata_all ) , yo ++,
colname = column (PEMdata_all, i) << Get Name;
insertar en (conv _columnas , colname )
) ;
O podrías cambiar la expresión regular:
"CY. *" Parece que funcionaría asumiendo que todas las columnas C de interés realmente comienzan con CY.
"\ w + \ d \ d" coincidiría con al menos uno o más caracteres de palabra seguidos inmediatamente por al menos dos caracteres numéricos. Esto coincidiría con 'CY22' y 'S12' por ejemplo, pero no con 'Carrier'
No voy a entrar en demasiados detalles, pero hay muchas maneras de analizar cadenas. Las expresiones regulares son un tema que puede y ha llenado muchos libros. Dicho esto, los conceptos básicos se pueden aprender rápidamente y valdría la pena dedicar una hora a ver un video de youtube o leer la sección Regex de la Guía de scripts de JSL si planea realizar cualquier tipo de codificación. Las expresiones regulares se utilizan en muchos lenguajes de programación, por lo que el conocimiento es transferible.
Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?¡Increíble! Esto funciona exactamente lo que estaba buscando. Agregué una sección repetida para convertir las columnas "C". ¡¡Aclamaciones!!
Sin embargo, el único problema que queda es que está recogiendo una de las otras columnas de "nombre" (número de portadora). ¿Cuál sería la línea de guión para buscar "C. *" pero excluir "Carrier #"?
Re: Ayuda w / parsing ambiguo archivo .dat? ¿Convertir unidades, agregar etiquetas?Si bien el código de su antiguo compañero de trabajo se ve bien, está mal comentado. En lugar de perder mi tiempo tratando de averiguarlo, simplemente agregué la funcionalidad que buscaba al final. Simplemente pegue el código de abajo hasta el final.
De todos modos, es un método de programación mejor, ya que siempre es mejor mantener la programación funcional por separado. Un código para analizar, un código para convertir, ect. Mantiene el código limpio, más fácil de depurar, refactorizar, leer, etc.
Este código (1) encuentra todas las columnas que comienzan con "S"
(2) agrega una nueva columna que convierte la anterior a pulgada y adjunta la etiqueta "(pulgada)" (podría cambiar fácilmente para convertir a (mm).
(3) borra las columnas de mils. Solo puede eliminar las dos últimas líneas de código si desea mantenerlas.
// Porción añadida
// Buscar columnas S
S_columns = {} ;
para ( yo = 1 , yo <= ncols ( PEMdata_all ) , yo ++,
colname = columna ( PEMdata_all , yo ) << Obtener nombre ;
Si ( ! Está perdido ( expresiones regulares ( colname , "S. *" )) ,
insertar en ( S_columns , colname )
)
) ;
// Crear nuevas columnas con conversiones
para ( yo = 1 , yo <= Nitems ( S_columns ) , yo ++,
Newcol = PEMdata_all << Nueva Columna ( S_columns El yo ] || " (pulgada)" , Numérico , Continuo ,
Fórmula ( Columna ( PEMdata_all , S_columns El yo ]) [] * 1000 ));
// Opcionalmente eliminar columnas de mils anteriores
Newcol << Eliminar fórmula ;
PEMdata_all << Eliminar columnas ( Columna ( PEMdata_all , S_columns El yo ]) ) ;
) ;