Regex sur les fichiers dans un répertoireSalut,
J'essaie de générer un script qui ouvre un fichier basé sur une expression regex (le fichier commence par "dat"). Mon code est répertorié ci-dessous et il ne semble pas fonctionner. Y a-t-il quelque chose de spécial à faire lors de l’utilisation d’une expression régulière sur une liste ?
dir = choisir le répertoire ();
files = fichiers dans le répertoire (dir);
fichier de données = regex(fichiers, "(^dat.*)","\1");
open(dir||fichier de données);
Re : Regex sur les fichiers d'un répertoireSi ce cas est aussi simple qu'indiqué (tous les noms de fichiers cibles commencent par "dat") alors l'une ou l'autre méthode fonctionne et les deux sont faciles à utiliser. (Une méthode pour trouver un nom de fichier correspondant est basée sur des fonctions de caractères et l'autre méthode est basée sur des expressions régulières.) Si, en fait, le cas n'est pas simple ou devient plus complexe avec le temps, la première approche pourrait devenir plus difficile, voire même impossible. C'est dans ce cas que l'expression régulière serait une approche supérieure.
(Notez que JMP définit également des « modèles » de texte avec un ensemble complet de fonctions permettant de créer et d'utiliser des modèles.)
Je ne pense pas que les expressions régulières soient frustrantes. La syntaxe de regex est assez simple.Je pense qu'utiliser des expressions régulières ou toute méthode similaire pour trouver des modèles cibles dans un texte réel est frustrant. Mais cela est dû au désordre dans les données non structurées plutôt qu'à l'outil. Si vous devez analyser du texte, alors les connaissances et les compétences en matière d'expression régulière sont précieuses.
Re : Regex sur les fichiers d'un répertoireEn plus des solutions précédentes, vous souhaiterez probablement travailler avec les tables de données après les avoir importées avec la fonction Open(). Je capturerais les références de la table de données dans une autre liste. J'utiliserai la deuxième solution comme exemple, mais évidemment la même chose fonctionnerait également avec la première solution.
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 sur les fichiers d'un répertoireVoici une façon de mettre en œuvre @cwillden La solution avec 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 sur les fichiers d'un répertoireJ'ai toujours trouvé les expressions régulières frustrantes, alors je les évite autant que possible
.Je peux certainement me tromper, mais je ne pense pas qu'ils soient censés être appliqués à tous les éléments d'une liste.La solution la plus simple serait probablement de parcourir vos fichiers et de supprimer ceux qui ne commencent pas par « dat ». en utilisant quelque chose comme ceci :
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])
)
);