目錄中檔案的正規表示式你好,
我正在嘗試生成一個腳本,該腳本根據正則表達式打開一個文件(文件以“dat”開頭)。 下面列出了我的程式碼,但它似乎不起作用。 在列表上使用正規表示式時是否需要做一些特殊的事情?
dir = 選擇目錄();
文件=目錄中的文件(dir);
資料檔 = 正規表示式(文件, "(^dat.*)","\1");
開啟(目錄||資料檔);
回覆:目錄中檔案的正規表示式如果這種情況像所述的那樣簡單(所有目標檔案名稱都以“dat”開頭),那麼任一方法都有效,並且都易於使用。 (尋找符合檔案名稱的一種方法是基於字元函數,另一種方法是基於正規表示式。)如果事實上情況並不簡單或隨著時間的推移變得更加複雜,第一種方法可能會變得更加困難,甚至不可能的。 在這種情況下,正規表示式將是更好的方法。
(請注意,JMP 還定義了文字的“模式”,並提供了完整的用於建立模式和使用模式的函數。)
我不認為正規表示式令人沮喪。 正規表示式的語法非常簡單。我認為使用正規表示式或任何類似的方法在現實世界的文本中尋找目標模式是令人沮喪的。 但這是因為非結構化資料的混亂,而不是工具的混亂。 如果您必須分析文本,那麼正規表示式的知識和技能就很有價值。
回覆:目錄中檔案的正規表示式在新增到前面的解決方案中,您可能想要在使用 Open() 函數匯入資料表後使用它們。 我會在另一個列表中捕獲數據表引用。 我將使用第二個解決方案作為範例,但顯然相同的事情也適用於第一個解決方案。
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 );
);
);
回覆:目錄中檔案的正規表示式這是一種實作方法@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])
)
);
回覆:目錄中檔案的正規表示式我一直覺得正規表示式令人沮喪,所以我盡可能避免使用它們:)。我肯定是錯的,但我不認為它們意味著應用於清單中的所有項目。最簡單的解決方案可能是循環遍歷您的檔案並丟棄任何不以“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])
)
);