Selección de caracteres comodín de un nombre de archivo dadoHola,
Estoy tratando de buscar ciertos caracteres de un nombre de archivo y seleccionar esos archivos.
por ejemplo: nombre de archivo: HELLO123_MT_XYZ,
Código:
Para ( i = 1 , i <= N artículos ( archivos ) , i ++,
Si ( Contiene ( archivos [ i ] , "MONTE" ) , //Ingrese los criterios de búsqueda del nombre del archivo
Abierto ( archivos [ i ] ) ;
)
) ;
Código anterior con "MT" extraerá todos los nombres de archivo con MT como carácter. Pero, ¿cómo puedo seleccionar archivos con comodines? por ejemplo: *123*XY*
Re: Selección de caracteres comodín de un nombre de archivo dadoGracias por las respuestas.
No noté que tenía el mismo carácter repitiendo dos veces en el nombre del archivo y, por lo tanto, estaba extrayendo un montón de archivos.
Limité la longitud de la cadena del nombre del archivo y ahora puedo obtener archivos según los criterios de búsqueda.
¡Muchas gracias chicos!
Re: Selección de caracteres comodín de un nombre de archivo dadoLas expresiones regulares pueden proporcionar una solución más general.
// Wildcard in a string: *123*XY*
slist = {"HELLO123_MT_XYZ", "HELLO123_MT_Z", "GOODBYE123_MT_XY", "XY_FUBAR_123"};
rx = "(123).*(XY)";
for (i = 1, i <= nitems(slist), i++,
result = regex(slist[i], rx);
print(slist[i] || ": " || char(result));
);Re: Selección de caracteres comodín de un nombre de archivo dadoEstoy confundido con tus entradas. Primero, aclaremos el problema del código. Inicialmente cometí un error en el código. Y luego me equivoqué de nuevo. El código que necesitas usar es:
<SPAN class="token function">Contains</SPAN><SPAN class="token punctuation">(</SPAN> files<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"123"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator">></SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token operator">&</SPAN> <SPAN class="token function">Contains</SPAN><SPAN class="token punctuation">(</SPAN> files<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"XY"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator">></SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token operator">&</SPAN> <SPAN class="token function">Contains</SPAN><SPAN class="token punctuation">(</SPAN> files<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"XY"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator">></SPAN> <SPAN class="token function">Contains</SPAN><SPAN class="token punctuation">(</SPAN> files<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"123"</SPAN> <SPAN class="token punctuation">)</SPAN>
No hay nada mágico en este código. Déjame explicarlo. La función Contiene() busca en una cadena literal, en su caso, el valor actual de Archivos[i], buscando el valor del segundo argumento "123". Si se encuentra, devuelve la posición en la que se encontró. Entonces, el primer uso de Contiene () se asegura de que exista el valor "123". El segundo uso asegura que haya un valor de "XY" y la tercera comparación asegura que "XY" se encuentra después del valor de "123". Eso es todo lo que está haciendo.
Pido disculpas por el error de codificación .....
Re: Selección de caracteres comodín de un nombre de archivo dadoperdon por las multiples publicaciones.
Pero si uso el segundo criterio como " _ 0A", entonces puedo obtener un archivo específico cuando uso "0A", entonces ignora este criterio.
Estoy seguro de que me estoy perdiendo algo condición muy básica.
Gracias,
Chintán
Re: Selección de caracteres comodín de un nombre de archivo dadoEn realidad, si uso a continuación -
Si ( Contiene ( archivos [ i ] , "123" ) > 0 & Contiene ( archivos [ i ] , "XY" ) > Contiene ( archivos [ i ] , "123" ) ,
Puedo obtener resultado. pero oh El problema que encontré es que si el nombre del archivo es -
1. HOLAABC_0A_H2ABC
2. HOLAABC_1D_H2ABC
Si selecciono "ABC" y "0A", obtengo todos los archivos con "ABC", mientras que si uso "ABC" y "1D", obtengo un archivo específico que contiene ambos caracteres en el nombre del archivo.
¿Cómo se diferencia entre 0 un contra 1 ¿D? Ambos deben ser tratados como una cadena.
Re: Selección de caracteres comodín de un nombre de archivo dadoVaya, mi error, debería ser:
If( Contains( files[i], "123" ) > 0 & Contains( files[i], "123" ) > 0 & Contains( files[i], "XY" ) > Contains( files[i], "123" ),
Open( files[i] )
)
Re: Selección de caracteres comodín de un nombre de archivo dadotxnelson: Gracias por la pronta respuesta.
por alguna razón, todavía devuelve todos los archivos con "123" y no considera "XY" como criterio de búsqueda.
¿Tiene que ver algo con múltiples delims?
Re: Selección de caracteres comodín de un nombre de archivo dadoIf( Contains( files[i], "123" ) > 0 & Contains( files[i], "XY" ) > Contains( files[i], "123" ),
Open( files[i] )
)