方案:
我们的客户向我们提供了文件,其名称包含我们索引所需的ID号。
。\ root \ dir1 \ a123.txt(ID为123)
。\ root \ dir2 \ abc345.csv(ID为345)
。\ root \ dir3 \ 235.xls(ID为235)
我们知道根据文件位置和扩展名预期的格式。我们的客户希望能够添加
。\ root \ dir4 \ foo556.bar(ID为556)
意味着我们无法为root下的每个条目编写自定义方法。
我的解决方案:
我们想到的解决方案是将文件名的格式存储在XML文件中
<root>
<entry>
...
<format>abc###</format>
...
<entry>
<root>
当客户想要在root下添加新条目时,他们必须提供目录,文件扩展名和格式。然后在我们的最后实现一个getID()方法,该方法能够使用XML中指定的格式从文件名中检索ID。
问题:
还有其他人处理过类似情况吗?如果是,那么有比我提供的解决方案更好的解决方案吗?
答案 0 :(得分:1)
假设文件名始终位于<letters><digits>.<extension>
表格上,我会使用简单的正则表达式来匹配名称的相关部分。例如。 .*\\[a-z]*\([0-9]*\)\..*
(可能因所讨论的RE引擎而异)。
答案 1 :(得分:0)
如果你想要一个能够自动识别所有匹配文件的通用解决方案,你可以在shell中使用文件globs,如果它们可用并适用于你的特定情况:
类似的东西:
ls root / * / | sed's / ^(。*)([0-9])+(。[A-Za-z] [A-Za-z] [A-Za-z] +)$ /“\ 1 \ 2 \ 3“\ 2 /'| xargs -n2 runMyProgramHere
如果你需要以编程方式进行,通常目录查询在大多数语言中相当容易,列出/ root中的所有内容,列出所有内容,按+。+结尾的文件进行过滤,这是您的列表。
in psuedo-code:
for (directory in file.getDirectoryList("/root")) {
for (name in file.getDirectoryList("/root/" + directory)) {
if (name contains a sequence of numbers followed by a dot ending with an extension) {
extract id
store filename and id
}
}
}
如果你真的想要,你可以用正则表达式做到这一点,但我倾向于避免程序中的正则表达式,除非我有一个非常好的理由不这样做。他们往往知之甚少,并且在没有良好错误报告的情况下容易破裂。