-1

これはかなり些細なデータ解析の問題です。私はそれをやってのけるために使用すべき方法がはっきりしていません。

数百行のプレーン テキスト ファイルがあります。各行はまったく同じ形式です。行は連続したチャンクにあり、行の最初の項目は基本的にチャンク内の各行で繰り返されるキーです。

key0
key0
key0

...

keyN
keyN
keyN

特定のキーの行が辞書に折りたたまれているこのファイルから直接 NSDictionarys を作成したいと思います。だから辞書の辞書。

これを行う方法について何か考えはありますか?

乾杯、ダグ

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

chr1 0 2300000 p36.33 gneg

chr1 2300000 5300000 p36.32 gpos25

chr1 5300000 7100000 p36.31 gneg

chr1 7100000 9200000 p36.23 gpos25

// ... // さらに多く // ...

chrN 144700000 148400000 q22.3 gpos100

chrN 148400000 149600000 q23.1 gneg

chrN 149600000 150300000 q23.2 gpos25

chrN 150300000 154600000 q23.3 gneg

更新 1 - ファイルはディスク上にあります 明確にしていない場合、データはメモリ常駐ではなくディスク上にあります。私は実際に、各chrに1つずつ、ファイルをさいの目に切ることで逃げることができると思います。次に、NSArray に取り込み、次に NSDictionary に取り込むことができます。もちろん、誰かがもっとおしゃれなものを持っている場合を除きます。

4

2 に答える 2

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"]
  ]
}

*/
于 2009-09-08T00:43:10.240 に答える
0

NSScannerクラスを見てみましょう。

于 2009-09-07T15:51:01.550 に答える