ディレクトリ内のファイルの正規表現こんにちは、
正規表現に基づいてファイルを開くスクリプトを生成しようとしています(ファイルは「dat」で始まります)。 私のコードは以下にリストされていますが、機能していないようです。 リストで正規表現を使用する場合、何か特別なことを行う必要がありますか?
dir = ディレクトリを選択します();
ファイル = ディレクトリ (dir) 内のファイル;
データファイル = regex(ファイル, "(^dat.*)","\1");
open(dir||datafile);
Re: ディレクトリ内のファイルの正規表現このケースが前述したように単純である (すべてのターゲット ファイル名が「dat」で始まる) 場合は、どちらの方法でも機能し、どちらも使いやすいです。 (一致するファイル名を見つける 1 つの方法は文字関数に基づいており、もう 1 つの方法は正規表現に基づいています。)実際、ケースが単純ではない場合、または時間の経過とともにより複雑になる場合、最初のアプローチはより困難になるか、さらには難しくなる可能性があります。不可能。 このような場合には、正規表現が優れたアプローチとなります。
(JMP は、パターンを作成したりパターンを使用したりするための関数を完全に補完して、テキストの「パターン」も定義していることに注意してください。)
正規表現が面倒だとは思いません。 正規表現の構文は非常に単純です。現実世界のテキストからターゲット パターンを見つけるために正規表現または同様の方法を使用するのはイライラすると思います。 しかし、それはツールではなく、非構造化データが混乱しているためです。 テキストを分析する必要がある場合は、正規表現に関する知識とスキルが重要です。
Re: ディレクトリ内のファイルの正規表現前の解決策に加えて、Open() 関数を使用してデータ テーブルをインポートした後でデータ テーブルを操作することもできます。 データテーブル参照を別のリストにキャプチャします。 2 番目の解決策を例として使用しますが、明らかに最初の解決策でも同じことが機能します。
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: ディレクトリ内のファイルの正規表現これを実装する 1 つの方法は次のとおりです@cwillden 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: ディレクトリ内のファイルの正規表現私は正規表現をいつもイライラさせられるので、できる限り正規表現を避けています
。私は間違いなく間違っている可能性がありますが、リスト内のすべての項目に適用することは意図的ではないと思います。最も簡単な解決策は、ファイルをループして、「dat」で始まらないファイルを破棄することでしょう。次のようなものを使用します:
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])
)
);