这是一个相当简单的数据解析问题。我只是不清楚我应该用什么方法把它拉下来。
我有一个几百行的纯文本文件。每一行的格式完全相同。这些行是连续的块,其中一行中的第一项基本上是一个为一个块中的每一行重复的键:
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。当然,除非某人有一些更蠢的东西。
答案 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
课程。