从文件名中检索ID的最佳方法是什么?

时间:2012-01-04 14:12:29

标签: filenames

方案

我们的客户向我们提供了文件,其名称包含我们索引所需的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。

问题

还有其他人处理过类似情况吗?如果是,那么有比我提供的解决方案更好的解决方案吗?

2 个答案:

答案 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
    }
  }
}
如果你真的想要,你可以用正则表达式做到这一点,但我倾向于避免程序中的正则表达式,除非我有一个非常好的理由不这样做。他们往往知之甚少,并且在没有良好错误报告的情况下容易破裂。