2009-09-07 9 views
-1

これはかなり簡単なデータ解析の質問です。私はそれを取り除くために使うべき方法についてはっきりしていない。NSDictionary。どのようにファイルから直接作成するのですか?

私は数百行のプレーンテキストファイルを持っています。各行の形式はまったく同じです。

key0 
key0 
key0 

... 

keyN 
keyN 
keyN 

Iは、Aの行このファイルから直接NSDictionarysを構築したいと思います:ラインがラインの最初の項目は、本質的にチャンク内の各ラインについて繰り返されるキーである連続チャンクであります与えられたキーは辞書に集約されます。だから辞書の辞書。

これを行う方法についてのご意見はありますか?

乾杯、 ダグ

UPDATE 0 - ここでは、実際のデータのスナップショットです ここでは実際のデータです。私は、ファイルを各chrのチャンクに分割することができますか?必要なら。私は、単一のchrを取り込むソリューションに満足しています。

CHR 1 0 2300000 p36.33のgneg

CHR 1 2300000530万p36.32 gpos25

CHR 1530万710万p36.31のgneg

CHR 1710万920万p36.23のgpos25

// ... //ロットmore // ...

chrN 144700000 148400000 q22.3 gpos100

chrN1.484億1.496億q23.1 gneg

chrN1.496億1.503億q23.2 gpos25

chrN1.503億1.546億q23.3 gneg

UPDATE 1 - ファイル私はdidnの場合は、ディスク上にある それは明らかに、データはディスク上のメモリ常駐ではありません。私は実際には、ファイルを1つ1つに分割することで逃げることができると思います。その後、NSArrayに取り込んでからNSDictionaryに取り込むことができます。もちろん、誰かが驚くほどのものを持っていない限り。

+0

私はあなたが辞書のポイントを逃していると思います。キーがある場合は、そのキーに関連付けられた値が必要です。あなたの価値はどこから来ていますか? –

+0

そうは思わない。彼のサンプルファイルの内容が悪いと思います。 – bbum

+0

Dugla、より良いサンプルテキストファイルを投稿できますか?値が何であるかは不明であるため、達成しようとしていることを理解することは困難です。より良い例のテキストファイルが私たちを助けます。 –

答えて

1

次のソリューションは、配列の辞書を提供していますが、あなたが好きな任意のデータ構造を生成するための基礎として使用することができます:

// The values on each line are tab-delimited 
NSString* data = @"" 
    "key1 a b" 
    "key1 c d" 
    "key2 e f" 
    "key2 g h"; 

NSMutableDictionary* result = [NSMutableDictionary dictionary]; 
NSArray* lines = [data componentsSeparatedByString:@"\n"]; 

for (NSString* line in lines) { 
    NSArray* value = [line componentsSeparatedByString:@"\t"]; 
    NSString* key = [components objectWithIndex:0]; 
    [value removeObjectAtIndex:0]; // remove the key 

    NSArray* currentValue = [result objectForKey:key]; 
    if (currentValue) { 
    [currentValue addObjectsFromArray:value]; 
    } else { 
    [result setObject:[value mutableCopy] forKey:key]; 
    } 
} 

/* 

The result looks something like this: 

{ 
    "key1": [ 
    ["a", "b"], 
    ["c", "d"] 
    ], 
    "key2": [ 
    ["e", "f"], 
    ["g", "h"] 
    ] 
} 

*/ 
+0

このNathanに感謝します。実際には、ファイルはメモリ常駐ではなくディスク上にあります。私はこれを非常に簡単にするole Perlハッカーです。私が困惑している重要な要素は、ディスクからNSDictionaryにきれいに摂取することです。 乾杯、 ダグ – dugla

+0

クール。これは間違いなく私のところへ行く道のほとんどを私に与えてくれます。ありがとうナタン。 – dugla

+0

チャームのように働いた。冷たさ。もう一度ありがとう、Nathan。 – dugla

0

NSScannerクラスをご覧ください。

+1

解決策の一部ですが、すべてではありません。 – bbum

関連する問題