Mi Medio ni EnCad me extrae correctamente |
Responder |
Autor | |
marygarci
Nuevo Unido: 20/Abril/2020 Localización: Las Palmas Estado: Sin conexión Puntos: 25 |
Tema: Mi Medio ni EnCad me extrae correctamente Enviado: 21/Abril/2020 a las 14:11 |
Hola
Tengo un form que parte de una consulta, donde uno de los campos es la ruta de cada imagen que añado a la DB. Y obtengo lo siguiente, p.e. 1959.09.19-LA(VT)_VISITA NIKITA KHRUSHCHEV EEUU_Cafe de Paris (VNK-CAPA) 1947.xx.xx-XX(PC)_INTERPRETACION CON HELEN SORRELL_Guion desconocido (IHS-GUDE) y un larguísimo etcétera Como necesito extraer cada dato de estas subcarpetas, para la categoría, que está en mayúsculas, he usado Categoria: Medio([Nivel5];EnCad([Nivel5];"_")+1;EnCad([Nivel5];"_")+2) Lo he revisado muchísimas veces, pero nada :( Pero no va bien en muchas de ellas, sin embargo, en otras lo hace perfecto (no entiendo nada).. adjunto imágenes para que vean lo que me hace... Por cierto, la categoría la he puesto entre guiones bajos porque al tener antes guiones cortos, lo confundía con la fecha, o puntos, o cualquier otro símbolo ya usado en la carpeta. Además, siempre empezará en el caracter 19, pero su longitud será diferente. Nivel5 hace referencia a la ruta de donde extraigo la categoría |
|
emiliove
Administrador Unido: 16/Junio/2009 Localización: Mexico Estado: Sin conexión Puntos: 5694 |
Enviado: 21/Abril/2020 a las 15:28 |
Quizás algo como esto: Medio([Nivel5];EnCad(1;[Nivel5];"_")+1;EnCad(EnCad(1;[
Nivel5];"_")+1;[Nivel5];"_")-( EnCad(1;[Nivel5]+1)) Saludos.
Editado por emiliove - 21/Abril/2020 a las 15:31 |
|
fcoval
Asiduo Unido: 19/Enero/2013 Estado: Sin conexión Puntos: 225 |
Enviado: 21/Abril/2020 a las 15:30 |
Asi, algo rápido y muy mejorable...
Categoria: Medio([Nivel5];EnCad([Nivel5];"_")+1;EnCad(Medio([Nivel5];21;1000);"_")+1) Aunque a mi personalmente me gusta mas esta otra, que ya no tiene porque empezar en la posición 19: Categoria: Medio([Nivel5];EnCad([Nivel5];"_")+1;EnCad(Medio([Nivel5];EnCad([Nivel5];"_")+1;Longitud([Nivel5]));"_")-1) Editado por fcoval - 21/Abril/2020 a las 15:39 |
|
01loko
Colaborador Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
Enviado: 21/Abril/2020 a las 15:41 |
inicio=1 primero= instr(me!ensayoycategoria,"_") +1 'nos da la posicion del primer _ segundo=instr(primero,me!ensayoycategoria,"_") ' nos da posicion del segundo _ categoria= mid(me!ensayoycategoria,primero,seguno-primero) prueba eso Editado por 01loko - 21/Abril/2020 a las 15:43 |
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14734 |
Enviado: 21/Abril/2020 a las 15:46 |
El problema está en que EnCad devuelve la posición del carácter buscado. Y tu lo utilizas tanto para el primer argumento de la función Medio que es la que indica la posición inicial (bien) como en el tercer argumento que indica la longitud de caracteres a recuperar a partir del segundo argumento.
Creo que, si alguna vez sale bien, es de pura suerte. Como ya sabes, las expresiones no son mi fuerte (yo soy más de VBA) pero intentaré hacerlo en una expresión. Se trata de obtener la parte central (Medio) de la cadena Nivel5 empezando en el caracter siguiente al primer _ y acabando en el caracter anterior al último _ (asumo que solo hay 2) Si solo queremos el texto a partir del primer _ es sencillo: Medio([Nivel5];EnCad(1, [Nivel5];"_")) 1959.09.19-LA(VT)_VISITA NIKITA KHRUSHCHEV EEUU_Cafe de Paris (VNK-CAPA) --> VISITA NIKITA KHRUSHCHEV EEUU_Cafe de Paris (VNK-CAPA) Sobre esa cadena podriamos obtener la parte izquierda hasta la primera aparición de _ Izq(Medio([Nivel5];EnCad(1, [Nivel5];"_"));EnCad(1;Medio([Nivel5];EnCad(1, [Nivel5];"_"))-1) VISITA NIKITA KHRUSHCHEV EEUU_Cafe de Paris (VNK-CAPA) --> VISITA NIKITA KHRUSHCHEV EEUU Alternativamente podemos hacerlo utilizando InStrRev en lugar de EnCad. InStrRev devuelve la posición de un carácter desde el final de la cadena. Así pues, la longitud de la cadena a recuperar sera la posición del segundo _ (obtenido por InStrRev -1) menos la posición del primer _ (obtenido por EnCad) =Medio([Nivel5];EnCad(1;[Nivel5];"_")+1;InStrRev([Nivel5];"_")-1-EnCad(1;[Nivel5];"_")) Escrito del tirón. Un saludo
|
|
marygarci
Nuevo Unido: 20/Abril/2020 Localización: Las Palmas Estado: Sin conexión Puntos: 25 |
Enviado: 21/Abril/2020 a las 17:29 |
Gracias @emiliove. Gracias a Xavi, ahora sé que esto es una expresión jejejeje, la que me indicas le faltaba, nada, un par de chorradas, otro paréntesis final y eliminar un espacio de Nivel5. No obstante, da error, no arroja ningún dato, me aparece #Error Pero de verdad, gracias por tu tiempo, no obstante, estudio lo que me indicas
@fcoval. Mil gracias también por tu tiempo. Con tu primera propuesta, consigo prácticamente lo mismo que estoy consiguiendo, es decir, algunas categorías las consigo completas y en otras solo una parte o la primera letra de la categoría, raro, no? Me gusta mucho la sintaxis de la segunda, la veo menos enrevesada, complicada, de hecho, funciona a la perfección. Además, me ha "chivado" con un #¡Función! aquellas categorías que no están cerradas adecuadamente entre guiones bajos. Muchas gracias! @01loko, gracias también por tu tiempo en ayudarme, desgraciadamente, no entiendo lo que me indicas, mi base la he construido durante años, buscando muuuucha información y ejemplos, pero no entiendo ni de códigos ni de expresiones, intento entender lo que veo, pero no sería capaz de construir un código ni expresión yo solita :( @xavi, gracias, porque ahora sé la diferencia entre expresión y código VBA ;) Supongo que para ustedes es una chorrada, pero para mí es un pasito más para aprender y entender. Tanto tu expresión como la del otro compañero, funcionan a la perfección, pero no entiendo las diferencias, por qué uno es mejor que otro MIL GRACIAS A TODOS!
|
|
emiliove
Administrador Unido: 16/Junio/2009 Localización: Mexico Estado: Sin conexión Puntos: 5694 |
Enviado: 21/Abril/2020 a las 18:24 |
Entonces divide y vencerás, vamos a ver: En un cuadro de texto pones: EnCad(1;[Nivel5];"_") y te da la posición hasta el "_" y le das como Nombre: Primero Si pones otro cuadro de texto: EnCad([Primero]+1;[Nivel5];"_") te da la segunda posición y ya sabes que la resta de ambas te da los caracteres de las palabra entre ambos "_" y le das como Nombre: Segundo Ahora en otro cuadro de texto solo tienes que buscar con Medio desde donde comienza Primero +1 para quitar el "_" y hasta donde termina (Segundo - Primero+1) y listo lo lograste. Saludos. Editado por emiliove - 21/Abril/2020 a las 18:25 |
|
marygarci
Nuevo Unido: 20/Abril/2020 Localización: Las Palmas Estado: Sin conexión Puntos: 25 |
Enviado: 22/Abril/2020 a las 13:17 |
Hola emiliove, efectivamente, hice algo parecido, pero no como me indicas tú, más a lo chapuza que no sé de código. Lo miro a ver si me va mejor, pero que ya está solucionado jejejeje ;)
muchas gracias
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |