2010-02-04 6 views
-1

j'ai à lire un fichier txt, le fichier Lokes comme,lire une ligne en Objective-C

WIPRO=Class_Name1 
TCS=Class_Name2 

Maintenant, je veux Class_Name1 et Class_Name2.How pour obtenir cette chaîne en Objective-C? Je ne trouve aucune fonction dans NSString pour obtenir l'index d'un caractère. Comme nous avons getIndex() dans C# .tel moi comment procéder.

+0

Je dois prendre la chaîne WIPRO dans STR1 et Class_Name1 dans Str2, i.e. Str1 = WIPRO & Str2 = Class_Name1, et charger ce Str2 Class_Name1 et encore pour l'itération suivante, comment le contrôle va à la ligne suivante ?? Il n'y a pas getLine() dans Objective-C. – suse

Répondre

1

Le NSString Reference a un sous-titre entier nommé "Recherche de caractères et de sous-chaînes".

Trouver personnages et de sous-chaînes

- rangeOfCharacterFromSet:
- rangeOfCharacterFromSet: Options:
- rangeOfCharacterFromSet: Options: Gamme:
- rangeOfString:
- rangeOfString: Options:
- rangeOfString: Options: :
- rangeOfString: options: plage: locale:
- enumerateLinesUsingBlock:
- enumerateSubstringsInRange: options: usingBlock:

0

Les expressions régulières peuvent simplifier considérablement les choses. Checkout this answer: Regular expressions in an Objective-C Cocoa application

+0

Les expressions régulières sont une surdébit brut pour un format de fichier aussi simple. – bbum

+0

Vous avez probablement raison. 'componentsSeparatedByString:' est probablement tout ce dont on a vraiment besoin. –

1

Ok, va essayer à nouveau. Ce format est assez simple.

componentsSeparatedByString: est la méthode magique que vous voulez. Utilisez-le pour diviser la chaîne de texte en un tableau pour chaque ligne, puis interrompez chaque ligne pour accéder à la clé et à la valeur des lignes de chaque côté du =.

- (NSDictionary*)dictFromConfigString:(NSString*)myTxtFileAsString { 
    NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
    NSArray *lines = [myTxtFileAsString componentsSeparatedByString:@"\n"]; 
    for (NSString *line in lines) { 
     NSArray *pair = [line componentsSeparatedByString:@" = "]; 
     NSString *key = [pair objectAtIndex:0]; 
     NSString *value = [pair objectAtIndex:1]; 
     [result setObject:value forKey:key]; 
    } 
    return result; 
} 
+0

son me donnant ERREUR: application terminaison due à l'exception non interceptée 'NSRangeException', raison: '*** - [NSCFArray objectAtIndex:]: index (1) au-delà des limites (1)' – suse

+0

Eh bien cela suppose que chaque ligne est exactement le format vous avez spécifié. Si vous obtenez ceci, cela signifie que certaines lignes ne le sont pas. Vous voudrez peut-être ajouter une vérification d'erreur pour vous assurer que chaque ligne est ce que vous pensez qu'elle est avant de la traiter. Ce n'était qu'un bout pour vous développer. Définissez un point d'arrêt dans cette méthode quelque part et voyez quelle est la chaîne, puis inspectez et gérez ces cas. –

+0

Le gotcha avec cette approche est que la mémoire O (fileSize) & speedwise. Pour les fichiers volumineux, pensez à getline (3) ou consultez http://stackoverflow.com/questions/3707427/how-to-read-data-from-nsfilehandle-line-by-line#3711079 – Frederik

Questions connexes