2011-04-05 3 views
0

J'ai 13 lignes de texte au format suivant: "1234 56789 1235 98765 ..." (quatre chiffres - espace vide - cinq chiffres) boucle 3 fois. Le fait est que l'espace vide peut parfois ne pas être présent. comme si: "1234 56789 123598765 ..." mais la séparation 4 et 5 chiffres est toujours pertinente.Manipulation de NSString en 2D NSMutableArray

et je suis perplexe quant à comment je couper et coller le contenu de chaque ligne à une table comme la structure de données. Voilà ce que j'ai jusqu'à présent:

for (int column = 0; column < 6; column++) { 
     // take first 4 digits 
     cursor_offset += 4; 
     temp = [entry substringWithRange:NSMakeRange(cursor,cursor_offset)]; 
     cursor = cursor_offset; // update cursor position 
     if ([entry substringWithRange:NSMakeRange(cursor_offset,cursor_offset+1)] isEqualToString:@" "]) { 
      // space jump 
      cursor_offset+=1; // identify blank space and jump over it 
     } 

après d'aller plus loin et essayer de saisir un autre 6 chiffres ... Y at-il une façon plus intelligente de le faire? J'ai pensé à regex dont je préférerais ne pas se tracasser avec. une bonne pratique?

Répondre

1

Je serais probablement supprimer simplement tous les espaces de la chaîne, puis les morceaux morceau:

NSString *source = @"1234 56789 1234 1234 56789 1234 1234 56789 1234 1234 56789 1234 1234 56789 1234"; 
NSString *stripped = [[source componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet] componentsJoinedByString:@""]; 

NSAssert([stripped length] % 13 == 0, @"string length must be a multiple of 13"); 

NSMutableArray *sections = [NSMutableArray array]; 
for (NSInteger location = 0; location < [stripped length]; location += 13) { 
    NSString *substring = [stripped substringWithRange:NSMakeRange(location, 13)]; 
    NSArray *fields = [NSArray arrayWithObjects: 
        [substring substringWithRange:NSMakeRange(0,4)], 
        [substring substringWithRange:NSMakeRange(4,5)], 
        [substring substringWithRange:NSMakeRange(9,4)], 
        nil]; 
    [sections addObject:fields]; 
} 

Attention, tapé dans un navigateur et non compilé. Caveat Implementor

+0

élégant. c'est beaucoup plus intelligent que la boucle pour-maladroit que j'avais ... merci –

Questions connexes