2010-03-15 9 views
1

Pour le code suivant, je peux lire toutes les données dans la chaîne, et obtenir avec succès les données pour plot.Importer des données csv (SDK iphone)

NSMutableArray *contentArray = [NSMutableArray array]; 
NSString *filePath = @"995,995,995,995,995,995,995,995,1000,997,995,994,992,993,992,989,988,987,990,993,989"; 
NSArray *myText = [filePath componentsSeparatedByString:@","]; 
NSInteger idx;  
for (idx = 0; idx < myText.count; idx++) { 
    NSString *data =[myText objectAtIndex:idx]; 
    NSLog(@"%@", data); 
    id x = [NSNumber numberWithFloat:0+idx*0.002777778]; 
    id y = [NSDecimalNumber decimalNumberWithString:data];   
    [contentArray addObject: 
    [NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];  
} 

self.dataForPlot = contentArray; 

, je tente de charger les données à partir d'un fichier CSV, les données data.csv fichier a la même valeur et le même format que:

995,995,995,995,995,995,995,995,1000,997,995,994,992,993,992,989,988,987,990,993,989. 

je lance le code, il est censé donner la même sortie graphique. Cependant, il semble que les données ne sont pas chargées à partir du fichier CSV avec succès.
Je n'arrive pas à comprendre ce qui ne va pas avec mon code.

NSMutableArray *contentArray = [NSMutableArray array]; 
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"]; 
NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];  
if (Data) 
{ 
    NSArray *myText = [Data componentsSeparatedByString:@","]; 
    NSInteger idx;  
    for (idx = 0; idx < myText.count; idx++) { 
     NSString *data =[myText objectAtIndex:idx]; 
        NSLog(@"%@", data); 
     id x = [NSNumber numberWithFloat:0+idx*0.002777778]; 
     id y = [NSDecimalNumber decimalNumberWithString:data];   
     [contentArray addObject: 
     [NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y",nil]];  
    } 
    self.dataForPlot = contentArray; 

} 

La seule différence est

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"]; 
NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ]; 
if (data){ 
} 

Ai-je fait quelque chose de mal ici?

+2

Veuillez enregistrer les valeurs de retour de 'pathForResource: ofType:' et 'stringWithContentsOfFile: encoding: error:' et éditez votre question pour inclure la sortie. Veuillez également arrêter de supprimer cette erreur return-changez 'error: nil' en' error: & nameOfAVariableYouCreateToHoldAnNSErrorObject' et consignez cet objet, et éditez votre question pour inclure * cette * sortie. Les cadres essaient souvent de vous dire ce que vous faites mal; quand vous passez 'NULL' (ou' nil') à un retour d'erreur, vous les empêchez de le faire. –

+2

Comme un point de style, je peux suggérer que «données» n'est pas le nom de variable la plus significative, et ayant deux variables distinctes nommées «données» et «données» est carrément confus. +1 pour "n'ignorez pas le retour d'erreur, il se peut que vous essayiez de vous dire quelque chose" –

+1

L'appel d'une variable de chaîne "data" est déroutant en lui-même, car il existe une classe NSData, et moi, Je suis plus susceptible de nommer une variable "data" si elle contient un objet NSData. –

Répondre

9

J'ai configuré un exemple de projet et essayé ce code et cela a fonctionné.

Les deux points les plus probables d'erreurs sont

  1. vous ne recevez pas le chemin du fichier (à savoir filePath est nul)
  2. vous ne lisez pas le fichier correctement.

Je suggère d'ajouter:

NSLog(@"filePath: %@", filePath); 

NSLog(@"Data: %@", Data); 

et changer:

 
NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];  

à

 
NSError* error; 
NSString* Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error ];  

puis en ajoutant:

NSLog(@"error: %@", error); 

Bien sûr, exécuter ceci à travers le débogueur et vérifier les valeurs de retour devrait fonctionner aussi bien et vous permettre de savoir exactement où il échoue.

+0

merci pour votre aide !!! ouais, j'ai suivi l'emplacement du fichier de données et m'assure que je suis sur le bon chemin. Ça marche!! –

+2

Super. Ne pas oublier de marquer cette question comme répondue. – ericg

Questions connexes