2014-07-24 9 views
5

Sto provando a caricare un file .csv su Xcode utilizzando Objective-C e quindi voglio creare due array diversi. Il primo array dovrebbe avere valori dalle prime 2 colonne e il secondo array i valori della terza colonna.Lettura dal file CSV e creazione di array in Objective-C Xcode

So che quello che sto cercando è abbastanza simile a questo question, ma io sono completamente newbie in Objective-C e sono un po 'confuso.

Fino ad ora ho provato a scrivere il seguente codice:

NSString* fileContents = [NSString stringWithContentsOfURL:@"2014-07-16_15_41_20.csv"]; 
NSArray* rows = [fileContents componentsSeparatedByString:@"\n"]; 
for (int i = 0; i < rows.count; i ++){ 
    NSString* row = [rows objectAtIndex:i]; 
    NSArray* columns = [row componentsSeparatedByString:@","]; 
} 

Quindi, è questo pezzo di codice corretto fino ad ora? Inoltre, come posso dividere le colonne in 2 diversi array nel modo in cui ho descritto sopra?

+1

Fare attenzione durante l'analisi CSV se non si controlla la sua fonte. Esistono molte eccezioni strane che possono essere visualizzate poiché CSV non è un formato ben definito. Assicurati di sapere che non avrai mai elementi che possono contenere virgole (il backslash è sfuggito? Racchiuso tra virgolette?) Se hai intenzione di dividere le virgole come fai qui. – ahruss

risposta

7

Il tuo codice sembra corretto. Ma è preferibile utilizzare l'enumerazione rapida di Cocoa anziché un ciclo for con i numeri interi.

Per dividere in array il tuo codice potrebbe apparire come questo.

NSMutableArray *colA = [NSMutableArray array]; 
NSMutableArray *colB = [NSMutableArray array]; 
NSString* fileContents = [NSString stringWithContentsOfURL:@"2014-07-16_15_41_20.csv"]; 
NSArray* rows = [fileContents componentsSeparatedByString:@"\n"]; 
for (NSString *row in rows){ 
    NSArray* columns = [row componentsSeparatedByString:@","]; 
    [colA addObject:columns[0]]; 
    [colB addObject:columns[1]]; 
} 

Per saperne di più NSMutableArray

+0

Ho cercato di verificare i risultati scattate utilizzando 'NSLog (@ "ColumnA:% @", cola),' ma ottengo alcuni errori come: '[__NSCFConstantString isFileURL]: selettore non riconosciuto inviato ad esempio 0x4a90 2014- 07-24 20: 30: 06.820 MyLocationMap [2759: 60b] *** Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '- [__ NSCFConstantString isFileURL]: selettore non riconosciuto inviato all'istanza 0x4a90'' – Galil

+0

Dovresti utilizzare meglio NSString's 'stringWithContentsOfFile: encoding: errore:'. Di quanto dovrai passare un percorso valido. Dove si trova questo file CSV? – idmean

+0

Ho trascinato e rilasciato il file CSV nella directory Xcode in cui sono presenti tutti i file del codice sorgente. Devo dare il percorso completo della directory in cui esiste il file CSV? – Galil