私はファイルパーサーを書いていますが、それが返すウィッチの「データフィールド」を判別できるようにしたいと思います。
私はPythonを学び始めており、今でもJavaプログラマーのように考えることに慣れているので、この質問は、ファイルを具体的に解析する方法ではなく、モジュールを設計する方法に関するものです。
コンテキスト化すると、ファイルの各行には固定数の文字が含まれ、各情報は特定のインデックスの間に含まれます。例えば。:
XX20120101NAME1CITYA
XY20120101NAME2CITYB
この架空の例では、インデックス0から2まで、1つの情報があり、2から10まで、というように続きます。
Javaを使用して、私は通常、さまざまな情報を表す列挙子を作成し、それぞれが開始インデックスと終了インデックスを「格納」します。次に、構文解析クラスで、 n個の異なる列挙型を受け入れるようにメソッドを使用可能な設計にします。例えば。:
enum FileInformation {
INFO01(0,2), INFO02(2,10), INFO03(10,15), INFO04(15,20);
int startIndex;
int endIndex;
public FileInformation(int si, int ei) {
this.startIndex = si;
this.endIndex = ei;
}
public int getStartIndex() { return si; }
public int getEndIndex() { return ei; }
}
public Whatever parse(FileInformation... infos) {
// Here I would iterate through infos[],
// using its start and end index to retrieve only what I need.
}
私はおそらくPythonで同じ行を使用するべきではないことを知っています、特に言語がそれを許可しないため(pythonには列挙型がない)、そしてpythonははるかに冗長ではないと思うので、私は良いことを知りませんこれと同じ結果を達成するための設計手法。
モジュールのユーザーを不必要な複雑さにさらしたり、各情報のインデックスをユーザーに強制したりしたくないことは言うまでもありません。モジュールのユーザーは、必要な魔女の情報とその順序を決定できることが望ましい。
それで、この必要条件をエレガントな方法で解決することについて何か洞察がありますか?前もって感謝します