2012-01-04 6 views
0

シナリオファイル名からIDを取得する最も良い方法は何ですか?

私たちの顧客は、名前、我々はインデックスの目的のために必要なID番号を含むファイルを提供してくれていています。

。\ルート\ DIR1 \ a123.txt

(IDは123である)。\ルート\ DIR2 \ abc345.csv

(IDは345である)。235 \ \ルート\のDIR3。 xls(IDは235)

ファイルの場所と拡張子に基づいて、どのようなフォーマットが予想されますか。私たちの顧客は

を追加できるようにしたいと思います。\ルート\ DIR4の\のfoo556.bar(IDが556である)

我々はルートの下に、各エントリのカスタムメソッドを記述することはできませんを意味します。

マイソリューション

は、我々が考えているソリューションは、顧客がルートの下に新しいエントリを追加したい場合は、XMLファイル

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

内のファイル名の形式を格納することです彼らは、ディレクトリ、ファイル拡張子とフォーマットを与える必要があります。次に、XMLで指定された形式を使用してファイル名からIDを取得できるgetID()メソッドを実装します。

質問

は誰にも似たような状況に対処していますか?もしそうなら、私が提供したものより良い解決策がありますか?

+0

"ルートの下の各エントリにカスタムメソッドを書き込むことができないことを意味します。 "?これは何を意味するのでしょうか?プログラミング言語はここで重要です。なぜなら、いくつかのソリューションはJavaでは苦労しますが、Pythonでは簡単だからです。編集上の注意と同様に、あなたの2つの質問には「はい」と答えるだけです。あなたはもう少し自由になりたいと思うかもしれません。 –

答えて

1

ファイル名が常に<letters><digits>.<extension>の形式であると仮定して、単純な正規表現を使用して名前の関連部分を照合します。例えば。.*\\[a-z]*\([0-9]*\)\..*(問題のREエンジンによって異なる場合があります)。

0

あなたが自動的に一致するすべてのファイルを識別し、一般的なソリューションをしたい場合は、彼らが利用可能であり、あなたの特定のケースのために働く場合、Yyouはシェルでファイルグロブを使用することができますよう

何か:

LSルート/ * / | (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 
    } 
    } 
} 

あなたが本当にしたい場合は、おそらく正規表現でこれを行うことができますが、私は私がいないと本当に良い理由がない限り、プログラムの中で正規表現を避ける傾向にあります。彼らはしばしばよく理解されておらず、良いエラー報告なしに壊れやすい。

関連する問題