File aperti (cerca caratteri dal nome file)Tutto,
Sto cercando di aprire i file in una cartella cercando i caratteri del nome del file in base all'input dell'utente.
/* 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 = {};Ri: File aperti (cerca caratteri dal nome del file)@Uday
Sono in grado di capire il problema. L'origine è di 18 caratteri e il pattern è una stringa intera.
Ho aggiunto un ulteriore ciclo per eseguire la ricerca dei file di input rispetto a tutti i file come di seguito.
Apprezzo le tue risposte rapide!
Grazie!
Per ( io = 1 , io <= N articoli ( File ) , io ++,
Per ( J = 1 , J <= N articoli ( X ) , J ++,
Se ( ! Manca ( Regex ( Sottostr ( File [ io ] , 1 , 18 ) , Car ( X [ J ] || "_" || sì [ J ] || "_" || z [ J ] ) ) ) ,
Aprire ( Dir.Test || "\" || File [ io ] ) ;
Rottura () ;
) ;,
)
) ;
Ri: File aperti (cerca caratteri dal nome del file)dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),"ALB")));
Non è necessario utilizzare la funzione "Contiene". Guarda l'esempio mostrato sopra. Se si desidera cercare solo 18 caratteri del nome del file, sarà necessario estrarlo utilizzando la funzione Substr
dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),Substr("ALBANY",1,3))));
Ri: File aperti (cerca caratteri dal nome del file)Ecco la copia del registro -
Nello script seguente, errore contrassegnato da /*###*/
For( i = 1, i <= N elementi( File ), i++,
Se(
!Manca(
Regex/*###*/(Char(
x || /*###*/"_" || /*###*/y || /*###*/"_" || /*###*/z/*###*/
), File[i])
),
Apri( TestDir || "\" || File[i] )
)
)
Il motivo per cui sto utilizzando contiene è cercare 18 caratteri dal nome del file che potrebbe essere lungo 40 caratteri.
Non sono sicuro di farlo bene.
Ri: File aperti (cerca caratteri dal nome del file)@CG ,
Puoi condividere qual è l'errore? Una copia del tuo registro?
Inoltre, non capisco il motivo per cui stai aggiungendo un Contiene ?
Il secondo argomento dovrebbe essere il termine con cui stai cercando di confrontare:
Quindi, se stassi cercando il tuo nome, sarebbe:
If (!IsMissing(Regex(Char(x || "_" || y || "_"||z),"CG")),
Ri: File aperti (cerca caratteri dal nome del file)sto cercando i primi 18 caratteri nel nome del file
ho modificato il ciclo seguente e aggiunto la condizione per cercare 18 caratteri fino a z per il nome del file x_y_z1234
per ( io = 1 , io <= N articoli ( File ) , io ++,
Se ( ! Manca ( Regex ( Car ( X || "_" || sì || "_" || z ) , contiene ( Sinistra ( File [ io ]) , 18 )) ,
Aprire ( Dir.Test || "\" || File [ io ]) ;
) ,
) ;
) ;
Ma ricevo ancora l'errore -
For( i = 1, i <= N elementi( File ), i++,
Se/*###*/(Manca(
Regex( Char( x || "_" || y || "_" || z ), Contiene( Sinistra( Files[i] ), 18 ) ),
Apri( TestDir || "\" || File[i] )
))
)
Ri: File aperti (cerca caratteri dal nome del file)@CG ,
È giusto supporre che nel tuo caso il formato del file sarà sempre ABC_12_XYZ (cioè x_y_z)? Se sì, un modo alternativo e più semplice potrebbe essere:
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]);
);
);