从文件夹列表中找出所有顶级文件夹
有数据库表TBLFOLDERS,数据如下所示:
FLDR |
C:\Folder1 |
C:\Folder1\Subfolder1 |
C:\Folder1\Subfolder2 |
C:\Folder2\Subfolder1 |
C:\Folder1 (顶级 1)
C:\Folder1\Subfolder1 (顶级 1 的下级)
C:\Folder1\Subfolder2 (顶级 1 的下级)
C:\Folder2\Subfolder1 (顶级 2)
有些是顶级目录,如顶级 1 和顶级 2,标志是下面有子目录。现在要找出所有的顶级目录。
这道题用自然思维去理解其实并不难,如果其他各串不是当前串的子串(只比头部),则说明该串是个顶级文件夹。比如,没有任何其他串是C:\Folder1的子串,C:\Folder1是个顶级文件夹,而C:\Folder1是C:\Folder1\Subfolder1的子串,则C:\Folder1\Subfolder1不是顶级文件夹。但是SQL要完成这样的嵌套循环非常难写,或用关联子查询的写法也不直观、很难理解。
用开源集算器的SPL就很容易写:
A |
|
1 |
=connect("mssql") |
2 |
=A1.query@x("SELECT * FROM TBLFOLDERS") |
3 |
=A2.select((x=#,y=#1,!A2.select@1(#!=x && pos@h(y,#1)))) |
SPL是专业的数据计算引擎,基于有序集合设计,提供了完善的集合运算,相当于Java和SQL优势的结合,很容易处理这种嵌套循环问题。
英文版