目录中文件的正则表达式你好,
我正在尝试生成一个脚本,该脚本会根据正则表达式(文件以“dat”开头)打开一个文件。 下面列出了我的代码,但它似乎无法正常工作。 在列表中使用正则表达式时是否需要做一些特别的事情?
dir = 选择目录();
files = 目录中的文件(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])
)
);