2010-12-14 14 views
3

私は、objective-cやオブジェクト指向プログラミングにはかなり新しく、理論的、文体的な質問があります。私がしたいのは、コンマで区切られたファイルのエントリを持つクラスのテーブルを読み込むことです。ファイル内のデータは、短いキーとそれに続くいくつかの文字列の値で構成された多数のエントリで構成され、すべてがcommmで区切られます。コンマで区切られたファイルからクラスを読み込むのに最適な方法

これを行うには数百万の方法がありますが、私は、厳密に理論的な観点から、どのような方法が最良であるかを尋ねています。私はその時点でコーディングしているXMLから離れていたいと思いますが、エントリープログラムを一緒に入手すると、最終的にその形式に変換されます。

私は関数を使って 'next record'を取得し、関数内外に構造体を渡し、クラスの新しいインスタンスを作成し、構造体からロードして配列に追加することができます。私はstringWithContentsOfFileメソッドを使用して最初に文字列にファイルをロードし、次にクラスにロードする構造要素を返すためにファイルを3進するために文字列関数といくつかのポインタを使用します。

これはobjective-cでこれを行う合理的な方法のようですか、それとも少なくとも理論的にはうまくいくかもしれないより良い方法がありますか?

答えて

4

あなたはCSVファイルをお持ちですか? There's some code for that

最も簡単な方法は、のようになります。コードの素敵な作品です

#import "CHCSV.h" 

NSString * csvFile = ...; //path to the CSV file 
NSError * error = nil; 
NSArray * contents = [NSArray arrayWithContentsOfCSVFile:csvFile 
               encoding:NSUTF8StringEncoding 
                error:&error]; 
if (contents == nil) { 
    NSLog (@"Error %@", error); 
} else { 
    for (NSArray * row in contents) { 
     NSLog(@"CSV fields in this line: %@", row); 
     // "row" contains all the fields (as NSStrings) that were present 
     // on this line of CSV 
    } 
} 
+0

。古いCOBOLerのためにちょっとコンパクトですがかなりかわいいです。入力ファイルの周りに「クラス」を構築し、必要なものを抽出するために「メソッド」を使用することを考えました。 1つのメソッドをNSSTRINGにロードする...別のメソッドを次の行を他の文字列に抽出する...現在の行の最初の値を取得する別のメソッド... etc ...これはかなり過剰ですか? –

+0

@Joeそれはあなたの目標がコードと何であるかによって異なります。 'CHCSVParser'を書くとき、私の目標はできるだけシンプルにすることだったので、イベントドリブンの解析オプション(それがどのように動作するかについてはプロジェクトを参照)に加えて、ワンラインコール。 –

+0

ありがとう。私はおそらく両方の方法(あなたが提供したコードを使用して)と別の多分より正式なバージョンを試して、利点/欠点を見るつもりです。 –

関連する問題