Regex sui file in una directoryCIAO,
Sto cercando di generare uno script che apra un file basato su un'espressione regex (il file inizia con "dat"). Il mio codice è elencato di seguito e non sembra funzionare. C'è qualcosa di speciale che deve essere fatto quando si utilizza l'espressione regolare in un elenco?
dir = seleziona directory();
file = file nella directory(dir);
datafile = regex(files, "(^dat.*)","\1");
open(dir||filedati);
Re: Regex sui file in una directorySe il caso è semplice come indicato (tutti i nomi dei file di destinazione iniziano con "dat"), entrambi i metodi funzionano ed entrambi sono facili da usare. (Un metodo per trovare un nome file corrispondente si basa sulle funzioni dei caratteri e l'altro metodo si basa sulle espressioni regolari.) Se, infatti, il caso non è semplice o diventa più complesso nel tempo, il primo approccio potrebbe diventare più difficile o addirittura impossibile. Questo è il caso in cui l'espressione regolare sarebbe un approccio superiore.
(Si noti che JMP definisce anche "modelli" di testo con una serie completa di funzioni per creare modelli e utilizzare modelli.)
Non penso che le espressioni regolari siano frustranti. La sintassi della regex è abbastanza semplice.Penso che l'uso di espressioni regolari o qualsiasi metodo simile per trovare modelli target nel testo del mondo reale sia frustrante. Ma ciò è dovuto alla confusione dei dati non strutturati piuttosto che allo strumento. Se devi analizzare il testo, allora la conoscenza e l'abilità con le espressioni regolari sono preziose.
Re: Regex sui file in una directoryIn aggiunta alle soluzioni precedenti, probabilmente vorrai lavorare con le tabelle di dati dopo averle importate con la funzione Open(). Catturerei i riferimenti alla tabella dati in un altro elenco. Utilizzerò la seconda soluzione come esempio ma ovviamente la stessa cosa funzionerebbe anche con la prima soluzione.
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 sui file in una directoryEcco un modo per implementare @cwillden con la 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 sui file in una directoryHo sempre trovato frustranti le espressioni regolari, quindi le evito il più possibile
.Potrei sicuramente sbagliarmi, ma non penso che siano destinati ad essere applicati a tutti gli elementi di un elenco.La soluzione più semplice sarebbe probabilmente quella di scorrere i file ed eliminare quelli che non iniziano con "dat". usando qualcosa del genere:
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])
)
);