J'ai une méthode (le code ci-dessous est une version simplifiée) qui parse petits fichiers texte:Pourquoi ce comportement étrange se produit avec ce code? C-objectif
- (void)parseFile:(NSString *)aFile
{
NSDate *date;
NSNumber *number;
NSString *desc;
NSString *txt = [NSString stringWithContentsOfFile:aFile encoding:NSUTF8StringEncoding error:nil];
for (NSString *line in [txt componentsSeparatedByString:@"\n"]) {
if ([linesubstring isEqual:@"mydate"]) {
date = [dateFormat dateFromString:strDate];
}
if ([linesubstring isEqual:@"mynumber"]) {
number = [numberFormat numberFromString:strValue];
}
if ([linesubstring isEqual:@"mydesc"]) {
desc = [line substringWithRange:NSMakeRange(0, 10)];
}
if (!date && !number && !desc) {
...do something...
}
}
}
Le premier problème est que la variable date
est rempli avec le contenu du paramètre aFile
. Il suppose seulement que c'est la valeur correcte, quand le passe à travers le poing si/vérifier.
Alors pourquoi? Je pense que date
pourrait être un mot réservé et échangé, mais avec le même comportement.
Le deuxième problème est avec le dernier if (avec les imbriqués). Debug le code, je peux voir que Xcode il montre que « hors de portée », mais !number
échoue (Xcode pense qu'il est valide) ...
J'ai essayé d'autres combinaisons, comme [number isNotEqualTo:[NSNull null]]
(celui-ci jette un EXC_BAD_ACCESS d'erreur) , sans succès.
S'il vous plaît, quelqu'un pourrait-il donner quelques conseils? Je suis novice avec le cacao/objectif-c. Je viens de java ...
TIA,
Bob
Il semble y avoir un code clé manquant ici. Où sont définies linesubstring, strDate et strValue, et de quoi s'agit-il? Aussi, pour comparer les chaînes, vous utilisez '[myString isEqualToString: otherString]', pas 'isEqual'. Je ne comprends pas du tout ce que vous essayez de faire avec le code. Essayez-vous de définir le contenu d'une ligne de texte de votre fichier dans le type de variable approprié? Est-ce que "mydate" et "mynumber" et "mydesc" sont réellement dans le fichier texte? –
Probablement j'ai simplifié le code à beaucoup. "linesubstring" est le résultat d'un substringWithRange. Je l'ai omis car cette partie du code fonctionne correctement. strDate et strValue sont des formateurs. J'ai également omis alors. Oui. Les fichiers texte que j'essaie de lire sont des fichiers CSV. Je lis une ligne, cherche un motif, l'analyse et le stocke dans la variable. –