Script para buscar y reemplazarUtilizo un programa GCMS que agrega "saturado (####)" cuando se satura un recuento de área de pico.Después de exportar estos resultados de Excel a una tabla de datos JMP, me gustaría ejecutar un script que encuentre estas ocurrencias y elimine el "saturado ()" pero deje el número en formato numérico continuo 12,0.
secuencias de comandosRe: Script para buscar y reemplazarEl código que di arriba solo escribe en el Registro JMP . Parece @txnelson ya le ha dicho cómo manejar su columna 'Área'. Si quisiera, podría usar una combinación del código de coincidencia de patrones y su JSL.
Con todas estas cosas, todo se reduce a lo que puede suponer con seguridad sobre la regularidad de la entrada. Si bien el enfoque de coincidencia de patrones es (ligeramente) más general (y fácilmente podría hacerse más), en su caso puede que no importe.
Re: Script para buscar y reemplazarPruebe esto en la columna de su Área
Names Default To Here( 1 );
dt = Current Data Table();
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( k = 1, k <= N Rows( dt ), k++,
If( Contains( :Area[k], "(" ),
:Area[k] = Word( 2, :Area[k], "()" )
)
);
:Area << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );Re: Script para buscar y reemplazarLamentablemente, no pasó nada cuando ejecuté el script.Incluí una captura de pantalla de mis datos junto con los atributos de la columna, si eso ayuda.¡Gracias de nuevo!

Re: Script para buscar y reemplazarSi entiendo correctamente, esta podría ser una oportunidad para usar Coincidencia de patrones de JMP (gracias a @Craige_Hales 


NamesDefaultToHere(1);
// Define a function
removeSaturated =
Function({inStr}, {Default Local},
// A pattern that will match a span of digits, with or without a leading '-'
digits = (""|"-") + patSpan("0123456789");
// Put the match into 'found' (might be identical to 'inStr')
patMatch(inStr, digits >? found);
// Return 'found' as a number
Num(found);
);
// Try it out
Print(removeSaturated("saturated( 635403558 )"));
Print(removeSaturated("saturated(635403558)"));
Print(removeSaturated("635403558"));
Print(removeSaturated("635403"));
Print(removeSaturated("-635403"));
Print(removeSaturated("saturated( -635403 )"));
Re: Script para buscar y reemplazarEl script espera que "(" sea el primer carácter y ")" sea el último carácter.¿Es posible que los caracteres en blanco estén al principio o al final?
pruebe esta versión del script y vea si ayuda
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 1, i <= N Items( colList ), i++,
If( Left( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == "(" & Right( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Trim( Column( dt, colLIst[i] ) )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Trim( Column( dt, colList[i] )[k] ), 2 )
);
If( Right( Trim( Column( dt, colList[i] )[k] ), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );
)
);Re: Script para buscar y reemplazarGracias por el guión, pero parece que no fui lo suficientemente específico.Escribir guiones es muy nuevo para mí y asumí que la longitud del número no importaba.Supongo que estuvo mal.Jugué con el script pero no pude hacer que se convirtiera en "saturado (635403558)" en 635403558.Aprecio tu ayuda.
Re: Script para buscar y reemplazarInteractivamente, es muy fácil usar la capacidad de búsqueda para hacer un reemplazo global de "(" y ")".Luego, al usar Atributos estandarizados, puede seleccionar todas las columnas en cuestión y cambiarlas a formato numérico continuo (Fixed Dec, 12,0)
Encontrar está disponible en
Editar=>Buscar=>Buscar
Estandarizar atributos está disponible debajo del triángulo rojo en el Panel de columnas en el lado izquierdo de la tabla de datos.
Aquí hay un pequeño script que también funcionará, pero con una tabla de datos grande, puede ser lento
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 3, i <= N Items( colList ), i++,
If( Left( char(Column( dt, colList[i] )[1]), 1 ) == "(" & Right( char(Column( dt, colList[i] )[1]), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Column( dt, colLIst[i] )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Column( dt, colList[i] )[k] ,
2)
);
If( Right( (Column( dt, colList[i] )[k]), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) <<
Format( "Fixed Dec", 12, 0 );
)
);