0

我有一个从中提取信息的对象的文本文件,数据存储如下:

名称。|说明|2013-10-19 23:25:58 +0000|NO|NO

名称。|说明|2013-10-19 23:25:58 +0000|NO|NO

名称。|说明|2013-10-19 23:25:58 +0000|NO|NO

要将每一行放入一个字符串数组中,我执行以下操作:

NSArray *objectArray = [saveData componentsSeparatedByString:@"\n"];

这将产生一个带有单个字符串的数组,如下所示:

名称。|说明|2013-10-19 23:25:58 +0000|NO|NO

然后我想增加每个字符串的每个字段。

 NSMutableArray *items = [[NSMutableArray alloc] init];
    for (NSString *string in objectArray) {
        [items removeAllObjects];
        [items addObject:[string componentsSeparatedByString:@"|"]];
        for (int i = 0; i < [items count]; i++) {
            NSLog(@"%d      %@", i, [items objectAtIndex:i]);
        }
    }

但这只会产生整行而不是单个字段?

编辑:我的问题是我原来的 saveData 字符串。为我服务,因为我没有先验证它!

上面的代码工作正常,并产生如下输出:

2013-10-20 11:15:11.152 Wakely[3571:11603] 0      (
"name.1",
"desc",
"2013-10-20 00:15:05 +0000",
NO,
NO
)
2013-10-20 11:15:11.155 Wakely[3571:11603] 0      (
"name.2",
"desc",
"2013-10-20 00:15:07 +0000",
NO,
NO

)

我不应该可以通过使用 [items objectAtIndex:0] 来获取 name1 吗?它似乎被存储为一个完整的、带有线条描述的单个对象,而不是 5 个单独的字符串?

4

3 回答 3

4
NSString* test = @"name.|description|2013-10-19 23:25:58 +0000|NO|NO";

NSArray* testarray = @[test,test,test];

NSMutableArray* finalArray = [[NSMutableArray alloc]init];

for (NSString* teststring in testarray) {
    [finalArray addObject:[teststring componentsSeparatedByString:@"|"]];
}

NSLog(@"%@",finalArray);

结果:

2013-10-20 01:46:47.484 test[38523:60b] (
        (
        "name.",
        description,
        "2013-10-19 23:25:58 +0000",
        NO,
        NO
    ),
        (
        "name.",
        description,
        "2013-10-19 23:25:58 +0000",
        NO,
        NO
    ),
        (
        "name.",
        description,
        "2013-10-19 23:25:58 +0000",
        NO,
        NO
    )
)

用你的东西编辑:

NSArray *objectArray = [saveData componentsSeparatedByString:@"\n"];

NSMutableArray* finalArray = [[NSMutableArray alloc]init];

for (NSString* teststring in objectArray) {
    [finalArray addObject:[teststring componentsSeparatedByString:@"|"]];
}

NSLog(@"%@",finalArray);

编辑 2:

NSArray* firstItem = finalArray[0];
NSString* name1 = firstItem[0];
于 2013-10-19T23:46:56.503 回答
0

类似于 incmiko 的做法,但使用块而不是 for 循环。

    NSString* test = @"name.|description|2013-10-19 23:25:58 +0000|NO|NO";

    NSArray *multipleLines = @[test, test, test];

    [multipleLines enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%@", [obj componentsSeparatedByString:@"|"]);
    }];

输出:

2013-10-19 19:48:58.522 Strings[407:303] (
    "name.",
    description,
    "2013-10-19 23:25:58 +0000",
    NO,
    NO
)
2013-10-19 19:48:58.523 Strings[407:303] (
    "name.",
    description,
    "2013-10-19 23:25:58 +0000",
    NO,
    NO
)
2013-10-19 19:48:58.524 Strings[407:303] (
    "name.",
    description,
    "2013-10-19 23:25:58 +0000",
    NO,
    NO
)
于 2013-10-19T23:50:19.003 回答
0

那是因为您将 NSArray 作为整个对象添加到 items 数组中。尝试使用代码,它应该打印单个项目而不是整个数组:

NSString* test = @"name.|description|2013-10-19 23:25:58 +0000|NO|NO";
NSString* test1 = @"name1.|description1|2013-10-19 23:25:58 +0001|NO1|NO1";

NSArray *objectArray = @[test,test1];

NSMutableArray *items = [NSMutableArray array];

for (NSString *string in objectArray) {
    [items addObjectsFromArray:[string componentsSeparatedByString:@"|"]];
}

NSLog(@"First Item = %@", items[0]);
于 2013-10-20T01:26:47.457 回答