-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 一个。然后我可以摄取到 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 回答