Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)Tous,
J'essaie d'ouvrir des fichiers dans un dossier en recherchant les caractères du nom de fichier en fonction de la saisie de l'utilisateur.
/* 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 : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)@Uday
Je suis capable de comprendre le problème. La source comporte 18 caractères et le modèle est une chaîne entière.
J'ai ajouté une boucle supplémentaire pour effectuer une recherche des fichiers d'entrée sur tous les fichiers comme ci-dessous.
Merci pour vos réponses rapides !
Merci!
Pour ( je = 1 , je <= N articles ( Des dossiers ) , je ++,
Pour ( j = 1 , j <= N articles ( X ) , j ++,
Si ( ! Est manquant ( Expression régulière ( Sous-titre ( Des dossiers [ je ] , 1 , 18 ) , Carboniser ( X [ j ] || "_" || oui [ j ] || "_" || z [ j ] ) ) ) ,
Ouvrir ( RépTest || "\" || Des dossiers [ je ] ) ;
Casser () ;
) ;,
)
) ;
Re : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),"ALB")));
Vous n'avez pas besoin d'utiliser la fonction "Contient". Regardez l'exemple ci-dessus. Si vous souhaitez simplement rechercher 18 caractères du nom de fichier, vous devrez alors les extraire à l'aide de la fonction Substr.
dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),Substr("ALBANY",1,3))));
Re : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)Voici une copie du journal -
Dans le script suivant, erreur marquée par /*###*/
Pour( i = 1, i <= N Items( Files ), i++,
Si(
!Est manquant(
Regex/*###*/(Char(
x || /*###*/"_" || /*###*/y || /*###*/"_" || /*###*/z/*###*/
), Fichiers[i])
),
Ouvrir( TestDir || "\" || Fichiers[i] )
)
)
La raison pour laquelle j'utilise contain est de rechercher 18 caractères dans le nom de fichier qui pourrait contenir 40 caractères.
Je ne suis pas sûr de le faire correctement.
Re : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)@CG ,
Pouvez-vous partager quelle est l'erreur ? Une copie de votre journal ?
De plus, je ne comprends pas pourquoi vous ajoutez un Contains ?
Le deuxième argument doit être le terme avec lequel vous essayez de faire correspondre :
Donc, si vous cherchiez votre nom, cela voudrait :
If (!IsMissing(Regex(Char(x || "_" || y || "_"||z),"CG")),
Re : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)je recherche les 18 premiers caractères du nom de fichier
J'ai modifié la boucle ci-dessous et ajouté une condition pour rechercher 18 caractères jusqu'à z pour le nom de fichier x_y_z1234
pour ( je = 1 , je <= N articles ( Des dossiers ) , je ++,
Si ( ! Est manquant ( Expression régulière ( Carboniser ( X || "_" || oui || "_" || z ) , contient ( Gauche ( Des dossiers [ je ]) , 18 )) ,
Ouvrir ( RépTest || "\" || Des dossiers [ je ]) ;
) ,
) ;
) ;
Mais j'ai toujours une erreur -
Pour( i = 1, i <= N Items( Files ), i++,
Si/*###*/(est manquant(
Regex( Char( x || "_" || y || "_" || z ), Contient( Left( Files[i] ), 18 ) ),
Ouvrir( TestDir || "\" || Fichiers[i] )
))
)
Re : Ouvrir des fichiers (rechercher des caractères à partir du nom de fichier)@CG ,
Est-il juste de supposer que dans votre cas, le format de fichier sera toujours ABC_12_XYZ (c'est-à-dire x_y_z) ? Si oui, une solution alternative et plus simple pourrait être :
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]);
);
);