的NSDictionary。如何直接从格式化文件创建?

时间:2009-09-07 15:39:25

标签: iphone objective-c parsing nsdictionary

这是一个相当简单的数据解析问题。我只是不清楚我应该用什么方法把它拉下来。

我有一个几百行的纯文本文件。每一行的格式完全相同。这些行是连续的块,其中一行中的第一项基本上是一个为一个块中的每一行重复的键:

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一个。然后,我可以摄入NSArray,然后进入NSDictionary。当然,除非某人有一些更蠢的东西。

2 个答案:

答案 0 :(得分: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"]
  ]
}

*/

答案 1 :(得分:0)

查看NSScanner课程。