jsl - 如何使用特定的命名约定打开最新的文件?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,大家好,
如何编写jsl脚本以打开包含特定命名约定的目录中的最新文件?我有以下代码将打开目录中的最新文件:
(
OpenNewestFile =目录中的文件(“C:\ users \ me \ MyDocuments \”);
{T,P} = {0,1};
for(i = 1,i <= n items(OpenNewestFile),i ++,
ti =上次修改日期(“C:\ users \ me \ MyDocuments \”|| OpenNewestFile );
如果(TI> T,T + TI; P = I));
dt1 =打开(“C:\ users \ me \ MyDocuments \”|| OpenNewestFile
)
);
每天一次将新文件写入目录,其名称类似于“FD_History_2016_08_27_17_36.csv”
如何修改此脚本以查找最新的“FD_History_”文件并打开它而忽略目录中的任何其他文件?
提前致谢!
Re:jsl - 如何使用特定的命名约定打开最新文件?此示例使用正则表达式来查看名称是以.jmp结尾($匹配行的结尾)还是以字母a开头(^匹配行的开头)。 如果匹配失败,正则表达式返回缺失值。 RemoveFrom功能从列表中删除违规项。 for循环向后运行,因此删除的项目不会更改尚未检查的列表部分。 (删除项目时,后续项目的索引会发生变化。)
NULL告诉正则表达式不要替换匹配的文本; IGNORECASE告诉正则表达式Jmp和jmp应匹配。
X = filesindirectory( “$桌面”);
for(i = nitems(x),i> = 1,i--,
if(ismissing(正则表达式(x , “.Jmp $ | ^一” ,NULL,IGNORECASE)),removefrom(x,i))
);
节目(x)的;
x = {“animated.gif”,“stories.jmp”,“Untitled 3.jmp”};
您可以在此循环中构建最后一个修改日期,或者在此循环之后将其保留在单独的循环中。
回复:jsl - 如何打开具有特定命名约定的最新文件?你好,
我遇到了类似的问题,但在这种情况下,文件夹名称每个工作周都会发生变化。
文件夹结构如下:
\\themainfolder\ 202503 \PPT_ 12345 \subfolders\indicators.xlsx。
主文件夹包含 3 或 4 个“YYYYWW”子文件夹 - 例如 202503、202504、202505,并且与 PPT_ 12345文件夹关联的编号每周都是随机的。
我设法获取了所有 YYYYWW 子文件夹 {“202512”、“202513”、“202514”} 的列表,但我需要选择最新的文件夹(最大数量),在本例中为“202514”。
然后我需要只选择 PPT 文件夹(还有其他子文件夹,但只有一个名为“PPT_...”)。
你能帮我一下吗?
谢谢
回复:jsl - 如何打开具有特定命名约定的最新文件?allfiles = Files In Directory( "c:/" );
show(N Items( allfiles )); // 15 or so
dirlist = Filter Each( {f}, allfiles, Is Directory( "c:/" || f ) );
show(N Items( dirlist )); // 12 or so
sorted = Reverse( Sort List( dirlist ) ); // biggest first
filtered = Filter Each( {f}, sorted, Starts With( f, "Prog" ) );
// {"ProgramData", "Program Files (x86)", "Program Files"}
编辑:添加路径
更多:JMP 16 结果,见上文。较新的 JMP 版本可能在处理 c:/ 方面做得更好——预先过滤您不想看到的文件系统对象。但想法是一样的,使用 JSL 函数保留您想要的内容并过滤掉其余内容。反向排序应将日期置于位置 1。
回复:jsl - 如何打开具有特定命名约定的最新文件?谢谢 Craige。抱歉回复晚了。它运行良好。唯一的缺点是文件夹包含很多子文件夹,而且“目录中的文件”功能运行时间太长。总之,谢谢你的帮助。