Импорт данных CSV (SDK iphone) - PullRequest
       11

Импорт данных CSV (SDK iphone)

1 голос
/ 15 марта 2010

Для следующего кода я могу прочитать все данные в строке и успешно получить данные для графика.

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;

Затем я пытаюсь загрузить данные из файла CSV, данные в файле Data.csv имеют то же значение и тот же формат, что и:

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

Я запускаю код, он должен выдавать тот же граф. однако, похоже, что данные не загружаются из CSV-файла успешно.
Я не могу понять, что не так с моим кодом.

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;

}

Единственная разница -

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

Я что-то здесь не так сделал?

1 Ответ

9 голосов
/ 15 марта 2010

Я установил пример проекта и попробовал этот код, и он заработал.

Две наиболее вероятные точки ошибки:

  1. вы не получаете путь к файлу (т.е. filePath равен nil)
  2. вы неправильно читаете файл.

Я бы предложил добавить:

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

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

и меняется:

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

до

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

и добавление:

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

Конечно, запуск этого через отладчик и проверка возвращаемых значений должны также работать и сообщать вам точно, где он не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...