0

情報を抽出するオブジェクトのテキスト ファイルがあり、データは次のように保存されます。

名前|説明|2013-10-19 23:25:58 +0000|いいえ|いいえ

名前|説明|2013-10-19 23:25:58 +0000|いいえ|いいえ

名前|説明|2013-10-19 23:25:58 +0000|いいえ|いいえ

各行を文字列の配列に入れるには、次のようにします。

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

次のような個々の文字列を含む配列が生成されます。

名前|説明|2013-10-19 23:25:58 +0000|いいえ|いいえ

次に、各文字列の各フィールドを追加します。

 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 つの区切られた文字列ではなく、線で区切られた 1 つのオブジェクト全体として格納されているように見えますか?

4

3 に答える 3

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 に答える