Abrir archivos (buscar caracteres del nombre del archivo)Todo,
Estoy intentando abrir archivos en una carpeta buscando caracteres del nombre del archivo según la entrada del usuario.
/* Input values in 3 columns by user. eg of file name: ABC_12_XYZ. User will input ABC in 1st column, 12 in second col and XYZ in 3rd column. all three should match in a row for selecting the file. There could be 100's of files (unique name) in the folder. User will input all that he wants to select from folder into input file. The file name search is limited to 10 characters from beginning of file name. The code is getting stuck somewhere in loop*/
//Script ------
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
// location of files which needs to be read from a folder based on user inputs.
Set Default Directory("C:\test\");
Close( Retrieve, NoSave );
Col1_search = 1;
Col2_search = 1;
Count = 0;
For( i = 1, i <= N Items( files ), i++,
For( j = 1, j <= N Items( z ), j++,
If( Contains( files[i], z[j] ),
If( Col1_search == 1,
If( (Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0,
If( Col2_Search == 1,
If(
((Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0) & (Contains( Left( files[i], 10 ), y[j] ) > (Contains( Left( files[i], 10 ), x[j] ))),
Open( files[i] );
Count++;
),
Open( files[i] );
If( Count == N Items( z ),
Break();
);
)
)
),
Open( files[i] )
)
);
);
openDTs = {};Re: Abrir archivos (buscar caracteres del nombre del archivo)@Uday
Puedo resolver el problema. La fuente tiene 18 caracteres y el patrón es una cadena completa.
Agregué un bucle más para realizar la búsqueda de archivos de entrada en todos los archivos como se muestra a continuación.
¡Apreciamos sus rápidas respuestas!
¡Gracias!
Para ( i = 1 , i <= N artículos ( Archivos ) , i ++,
Para ( j = 1 , j <= N artículos ( X ) , j ++,
Si ( ! Está perdido ( expresión regular ( substrato ( Archivos [ i ] , 1 , 18 ) , Carbonizarse ( X [ j ] || "_" || y [ j ] || "_" || z [ j ] ) ) ) ,
Abierto ( DirPrueba || "\" || Archivos [ i ] ) ;
Romper () ;
) ;,
)
) ;
Re: Abrir archivos (buscar caracteres del nombre del archivo)dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),"ALB")));
No es necesario utilizar la función "Contiene". Mire el ejemplo que se muestra arriba. Si solo desea buscar 18 caracteres del nombre del archivo, deberá extraerlo usando la función Substr
dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),Substr("ALBANY",1,3))));
Re: Abrir archivos (buscar caracteres del nombre del archivo)Aquí está una copia del registro:
En el siguiente script, error marcado por /*###*/
Para (i = 1, i <= N elementos (archivos), i++,
Si(
!Está perdido(
Expresión regular/*###*/(Char(
x || /*###*/"_" || /*###*/y || /*###*/"_" || /*###*/z/*###*/
), Archivos[i])
),
Abrir( TestDir || "\" || Archivos[i] )
)
)
La razón por la que estoy usando contiene es para buscar 18 caracteres del nombre del archivo, que podría tener 40 caracteres.
No estoy seguro si lo estoy haciendo bien.
Re: Abrir archivos (buscar caracteres del nombre del archivo)@CG ,
¿Puedes compartir cuál es el error? ¿Una copia de su registro?
Además, no entiendo por qué estás agregando un Contiene.
El segundo argumento debe ser el término con el que intenta comparar:
Entonces, si estuvieras intentando buscar tu nombre, te gustaría:
If (!IsMissing(Regex(Char(x || "_" || y || "_"||z),"CG")),
Re: Abrir archivos (buscar caracteres del nombre del archivo)Estoy buscando los primeros 18 caracteres en el nombre del archivo.
Modifiqué el siguiente bucle y agregué la condición para buscar 18 caracteres hasta z para el nombre de archivo x_y_z1234
para ( i = 1 , i <= N artículos ( Archivos ) , i ++,
Si ( ! Está perdido ( expresión regular ( Carbonizarse ( X || "_" || y || "_" || z ) , contiene ( Izquierda ( Archivos [ i ]) , 18 )) ,
Abierto ( DirPrueba || "\" || Archivos [ i ]) ;
) ,
) ;
) ;
Pero sigo recibiendo el error.
Para (i = 1, i <= N elementos (archivos), i++,
Si/*###*/(Falta(
Regex( Char( x || "_" || y || "_" || z ), Contiene( Left( Files[i] ), 18 ) ),
Abrir( TestDir || "\" || Archivos[i] )
))
)
Re: Abrir archivos (buscar caracteres del nombre del archivo)@CG ,
¿Es justo suponer que, en su caso, el formato de archivo siempre será ABC_12_XYZ (es decir, x_y_z)? En caso afirmativo, una forma alternativa y más sencilla podría ser:
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
Close(Retrieve,"No Save");
TestDir = "C:\test\";
Files = Files In Directory(TestDir); // Returns a list of files in the directory
for(i = 1, i <= N Items(Files), i++,
If(!IsMissing(Regex(Char(x || "_" || y || "_"||z),Files[i])),
Open(TestDir ||"\" || Files[i]);
);
);