2012-01-04 168 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 
    } 
    } 
} 

你也許可以用正則表達式做,如果你真的想,但是我傾向於避免在項目的正則表達式,除非我有一個非常好的理由不這樣做。他們往往知之甚少,如果沒有良好的錯誤報告,他們很容易被打破。

相關問題