Regex en archivos en un directorioHola,
Estoy tratando de generar un script que abre un archivo basado en una expresión regular (el archivo comienza con "dat"). Mi código se muestra a continuación y no parece estar funcionando. ¿Hay algo especial que deba hacerse al usar expresiones regulares en una lista?
dir = escoger directorio();
archivos = archivos en el directorio (dir);
archivo de datos = expresión regular (archivos, "(^dat.*)","\1");
open(dir||archivo de datos);
Re: Regex en archivos en un directorioSi este caso es tan simple como se indica (todos los nombres de archivo de destino comienzan con "dat"), entonces cualquiera de los métodos funciona y ambos son fáciles de usar. (Un método para encontrar un nombre de archivo coincidente se basa en funciones de caracteres y el otro método se basa en expresiones regulares). Si, de hecho, el caso no es simple o se vuelve más complejo con el tiempo, el primer enfoque puede volverse más difícil o incluso más complejo. imposible. Ese caso es donde regex sería un enfoque superior.
(Tenga en cuenta que JMP también define 'patrones' de texto con un complemento completo de funciones para crear patrones y usar patrones).
No creo que las expresiones regulares sean frustrantes. La sintaxis de regex es bastante simple.Creo que usar expresiones regulares o cualquier método similar para encontrar patrones de destino en el texto del mundo real es frustrante. Pero eso se debe al desorden en los datos no estructurados más que a la herramienta. Si debe analizar texto, entonces el conocimiento y la habilidad con expresiones regulares son valiosos.
Re: Regex en archivos en un directorioAdemás de las soluciones anteriores, probablemente desee trabajar con las tablas de datos después de importarlas con la función Open(). Capturaría las referencias de la tabla de datos en otra lista. Usaré la segunda solución como ejemplo, pero obviamente lo mismo funcionaría con la primera solución también.
Names Default to Here( 1 );
dir = Pick Directory();
files = Files in Directory( dir );
data files = List();
For( i = 1, i <= N Items( files ), i++,
If( !Is Missing( Regex( files[i], "^dat.*" ) ),
ref = Open(dir||files[i]);
Insert Into( data files, ref );
);
);
Re: Regex en archivos en un directorioAquí hay una forma de implementar @cwillden La solución con regex():
Names default to here( 1 );
dir = pick directory();
files = files in directory(dir);
for(i=1, i <= N Items(files), i++,
If(!Is missing(regex(files[i],"^dat.*")), //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);
Re: Regex en archivos en un directorioSiempre he encontrado frustrantes las expresiones regulares, así que las evito tanto como sea posible
.Definitivamente podría estar equivocado, pero no creo que estén destinados a aplicarse en todos los elementos de una lista.La solución más fácil probablemente sería recorrer los archivos y descartar los que no comiencen con "dat". usando algo como esto:
for(i=1, i <= N Items(files), i++,
If(Substr(files[i],1,3)=="dat", //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);