2012-01-04 104 views
0

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

我们的客户为我们提供了文件的名称中包含我们需要用于索引目的的ID号。

。\根\ DIR1 \ a123.txt(ID是123)

。\根\ DIR2 \ abc345.csv(ID是345)

。\根\ DIR3 \ 235。 xls(ID为235)

我们知道基于文件位置和扩展名的格式。我们的客户希望能够增加

。\ ROOT \ dir4 \ foo556.bar(ID为556)

这意味着我们可以不写为根下的每个条目的自定义方法。

我的解决方案

我们正在考虑的解决方案是将文件名的格式存储在一个XML文件

<root> 
    <entry> 
      ... 
      <format>abc###</format> 
      ... 
    <entry> 
<root> 

当客户希望在以超级新条目他们必须提供一个目录,一个文件扩展名和一个格式。然后在我们的末端实现一个getID()方法,该方法能够使用XML中指定的格式从文件名中检索ID。

问题

有其他人处理类似的情况?如果是的话,是否有比我提供的更好的解决方案?

+0

“这意味着我们不能为根目录下的每个条目编写自定义方法。” “?这是什么意思?编程语言在这里很重要,因为一些解决方案在Java中很痛苦,但在Python中很容易。就像编辑说明一样,你的两个问题都回答为“是”。你可能想要更开放一些。 – 2012-01-04 14:15:44

回答

1

假设文件名将始终在表格<letters><digits>.<extension>上,我将使用一个简单的正则表达式来匹配名称的相关部分。例如。.*\\[a-z]*\([0-9]*\)\..*(可能因相关RE引擎而异)。

0

如果你想有一个通用的解决方案,它会自动识别匹配,Yyou可以使用文件水珠在壳(如果有)的所有文件,并为您的特定情况下工作:

类似:

LS根/ * / | ([0-9])+(。[A-Za-z] [A-Za-z] [A-Za-z] +)$ /“\ 1 \ 2 \ 3“\ 2 /'| xargs -n2 runMyProgramHere

如果您需要以编程方式执行此操作,通常目录查询在大多数语言中都相当容易,列出/ root中的所有内容,列出所有内容,以+。+结尾的文件进行过滤,还有您的列表。

在伪代码:

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 
    } 
    } 
} 

你也许可以用正则表达式做,如果你真的想,但是我倾向于避免在项目的正则表达式,除非我有一个非常好的理由不这样做。他们往往知之甚少,如果没有良好的错误报告,他们很容易被打破。

相关问题