Script para buscar y reemplazarYo uso un programa GCMS que agrega "saturado (####)" cuando un recuento de áreas pico está saturado.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 y continuo de 12,0.
ScriptingRe: Script para buscar y reemplazarDe forma interactiva, es bastante fácil utilizar la función Buscar para realizar una sustitución global de "(" y ")".Luego, utilizando Atributos estandarizados, puede seleccionar todas las columnas en cuestión y cambiarlas a formato numérico, continuo (diciembre fijo, 12,0)
Find 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 );
)
);Re: Script para buscar y reemplazarGracias por el guión, pero parece que no fui lo suficientemente específico.Escribir un guión es muy nuevo para mí y asumí que la longitud del número no importaba.Supongo que estuvo mal.Jugué con el guión, pero no pude convertir "saturado (635403558)" en 635403558.Aprecio tu ayuda.
Re: Script para buscar y reemplazarEl guión espera que "(" sea el primer carácter y ")" sea el último.¿Es posible que haya caracteres en blanco al principio o al final?
prueba esta versión del script y mira si te 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 reemplazarSi lo 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 reemplazarLamentablemente, no pasó nada cuando ejecuté el guión.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 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 );