目录中文件的正则表达式你好,
我正在尝试生成一个脚本,该脚本根据正则表达式打开一个文件(文件以“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])
)
);