Extraer cadena del nombreHola,
Me gustaría extraer una cadena de datos de un nombre. La posición de la cadena varía en el nombre y el nombre tiene un número variable de subcadenas dentro de ella. A continuación se muestra un ejemplo:
(GPN) CI-4 / E7 / DH-1 15S-40 L1807
DEO (GPN) JD CI-4 / E7 / DH-1 5S-40 L1807
(GPN) JD CI-4 / E7 / DH-1 40 L1807
Estoy interesado en dos partes: una cadena que contiene la letra S (en los ejemplos, 15S-40 y 5S-40) Y si w no está presente, estoy interesado en el valor numérico.
¿Es posible extraer esto usando funciones de fórmula estándar?
Cualquier ayuda sería genial.
Gracias,
Dipesh
Re: Extraer cadena de nombreParece que el componente que desea eliminar es el segundo a la última agrupación. Si ese es el caso, entonces el código a continuación lo hará. La función Word () es una función muy poderosa. Su documentación se puede encontrar en la Guía de secuencias de comandos o en el Índice de secuencias de comandos
Ayuda ==> Libros ==> Guía de secuencias de comandos
Ayuda ==> Índice de secuencias de comandos ==> Word
Names Default To Here( 1 );
dt = New Table( "test",
New Column( "String",
character,
values(
{"(GPN) CI-4/E7/DH-1 15S-40 L1807", "DEO (GPN) JD CI-4/E7/DH-1 5S-40 L1807",
"(GPN) JD CI-4/E7/DH-1 40 L1807"}
)
)
);
dt << New Column( "Value", character, formula( Word( -2, :String, " " ) ) );
Re: Extraer cadena de nombreHola,
Gracias por la respuesta.
Desafortunadamente, no hay nada en común donde la palabra que me gustaría extraer está en la cadena: a veces es la posición 2, a veces es la posición 7.
Saludos,
Dipesh
Re: Extraer cadena de nombreUsando una expresión regular, puede hacer coincidir un 'espacio' seguido de algunos caracteres hasta que toque una 'S-' y luego más caracteres hasta que toque el siguiente 'espacio'
PAT = "(GPN) CI-4 / E7 / DH-1 15S-40 L1807";
x = expresión regular (PAT, "\ S + (? = S -). *");
mostrar (x);
Re: Extraer cadena de nombreNo ha proporcionado un ejemplo de algo con una W, por lo que no se ha probado. Creo que esto resolverá tus problemas:
YourList = {"(GPN) CI-4/E7/DH-1 15S-40 L1807", "DEO (GPN) JD CI-4/E7/DH-1 5S-40 L1807", "(GPN) JD CI-4/E7/DH-1 40 L1807"};
Part1 = Part2 = {};
For(i=1,i<=N items(YourList),i++,
SubWords = Words(YourList[i], " ");
For(k=1,k<=N Items(SubWords),k++,
If(contains(SubWords[k],"S")>0,
Part1[i] = SubWords[k];
k=N Items(SubWords)+1;
)
);
);
For(i=1,i<=N items(Part1),i++,
If(contains(part1[i],"W")==0,
Part2[i] = right(part1[i],2);
)
);