2010-11-09 3 views
0

Je télécharge un fichier texte et utilise les informations qui s'y rapportent pour créer plusieurs objets.Comment gérer différents types d'informations dans un fichier texte

J'utilise le code suivant pour y parvenir:

NSString *fileContents = [NSString stringWithContentsOfURL: readerView.url 
                encoding: NSUTF8StringEncoding 
                error: NULL]; 

NSArray *lines = [fileContents componentsSeparatedByString:@"\n"]; 
for(NSString *line in lines) 
{ 
    NSArray *params = [line componentsSeparatedByString:@","]; 
    NSString *label1 = [params objectAtIndex:0]; 
    NSString *label2 = [params objectAtIndex:1]; 
    float weight = [[params objectAtIndex:2] floatValue]; 
    int x1 = [[params objectAtIndex:3] intValue]; 
    int y1 = [[params objectAtIndex:4] intValue]; 
    int x2 = [[params objectAtIndex:5] intValue]; 
    int y2 = [[params objectAtIndex:6] intValue]; 
    int type = [[params objectAtIndex:7] intValue]; 

    [graph addComponents:label1:label2 :weight :x1 :y1 :x2 :y2 :type]; 
} 

Un exemple d'une ligne dans le fichier texte est comme ceci:

A,B,6.0,270,190,150,190,1

Il est donc assez basique. Ce que je voulais faire cependant était pour la première ou la dernière ligne du fichier texte, avoir une URL qui déclencherait un autre téléchargement pour une image. Je ne peux pas penser à ce qui serait le meilleur moyen d'y parvenir. Dans mon esprit, je pense quelque chose comme cela dans le code pseudo:

Si (ligne = première ligne)
déclencheur télécharger
autre
passer par params.

Répondre

1

KennyTM a raison, mais je le ferais dans l'autre sens car , est un caractère d'URL valide pour certains schémas et invalide pour d'autres, donc il est possible (si peu probable) d'obtenir un faux positif. L'analyse de la ligne en tant qu'URL renverra zéro si la ligne n'est pas une URL valide, puis vous pouvez analyser la ligne en tant que données formatées en l'absence d'une URL.

for(NSString *line in lines) { 
    NSURL* url = [NSURL URLWithString:line]; 
    if (url) { 
     // trigger download... 
    } else { 
     NSArray *params = [line componentsSeparatedByString:@","]; 
     // Do stuff with params 
    } 
} 
+0

J'ai juste essayé ceci et il ne semble pas vérifier s'il s'agit d'une URL ou non. Je mets un NSLog après le 'if (url)' et il semble être imprimé indépendamment du fait que ce soit une URL ou non. –

1

Je voudrais essayer de vérifier si la ligne est dans le format params valide. Sinon, essayez d'analyser en URL.

En supposant que l'URL ne contient pas exactement 7 virgules,

for(NSString *line in lines) { 
    NSArray *params = [line componentsSeparatedByString:@","]; 
    if ([params count] == 8) { 
     // go through params 
    } else { 
     NSURL* url = [NSURL URLWithString:line]; 
     if (url) { 
      // trigger download... 
     } 
    } 
} 

De cette façon, l'URL peut être placé n'importe où dans le fichier.

+0

Oui, ça marche très bien! Je savais que ce que je voulais faire ne pouvait tout simplement pas penser à un moyen efficace. Merci Kenny! :) –

+0

Je semble avoir un problème avec 'NSURL URLWithString: line' ne fonctionne pas comme prévu. J'ai mis un point d'arrêt et j'ai parcouru le code et la variable 'url' est configurée même quand une chaîne qui n'est pas une URL lui est passée. Je pensais que si c'était le cas, il reviendrait à zéro? –

+0

Okay J'ai découvert une raison particulière pour laquelle cela se passe mais je ne comprends pas pourquoi. Fondamentalement, dans le but de garder mon fichier texte propre, j'ai mis quelques espaces dans certains des paramètres. E.G - 'B, C, 3.0,150,190,30, 40, 1' D'une façon ou d'une autre, pendant le débogage, j'ai remarqué que les lignes avec des espaces fonctionnaient bien mais que les lignes sans espaces étaient considérées comme des URL. Une idée de pourquoi c'est? –

Questions connexes