2012-04-18 8 views
5

Sono nuovo per la codifica quindi, per favore, scusami se questa sembra una semplice domanda.Creazione di una matrice da un file CSV tramite l'obiettivo C

Sto provando a tracciare le coordinate su una mappa.

Voglio leggere un file CSV e passare le informazioni a due array separati.

Il primo array sarà NSArray * towerInfo (contenente latitudine, longitudine e titolo torre)

secondo, NSArray * regione (contenente titolo torre e regione) con lo stesso indice di conteggio come prima matrice.

In sostanza, credo di aver bisogno di;

1) leggere il file in una stringa .....

2) dividere la stringa in un array temporaneo separazione di ogni/n/r ......

3) ciclo attraverso la matrice temporanea e creare un oggetto tower e region ogni volta prima di aggiungere queste informazioni ai due array di archiviazione principali.

È questo il processo giusto e se è così c'è qualcuno là fuori che può pubblicare qualche codice di esempio perché sto davvero lottando per farlo bene.

Grazie a tutti in anticipo.

Chris.

Ho modificato questo per mostrare un esempio del mio codice. Sto avendo il problema che sto ricevendo avvisi dicendo

1) "la dichiarazione locale di 'dataStr' nasconde la variabile di istanza 2)" la dichiarazione locale di 'array' nasconde la variabile di istanza.

Penso di capire cosa significano ma non so come aggirarlo. Il programma viene compilato ed eseguito ma il log mi dice che "l'array è nullo".

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize dataStr; 
@synthesize array; 

-(IBAction)convert { 
//calls the following program when the onscreen 'convert' button is pressed. 

    NSString *dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil]; 
    //specifies the csv file to read - stored in project root directory - and encodes specifies that the format of the file is NSUTF8. Choses not to return an error message if the reading fails 

    NSArray *array = [dataStr componentsSeparatedByString: @","]; 
    //splits the string into an array by identifying data separators. 

    NSLog(@"array: %@", array); 
    //prints the array to screen 

} 

Qualsiasi ulteriore aiuto sarebbe molto apprezzato. Grazie per le risposte finora.

+0

prima devi fare qualche cosa al tuo fianco e se u bloccati alcuni dove tra i tentativi di pubblicare il codice e quindi possiamo aiutarti così tanto con i tuoi tentativi –

+0

Puoi dare un paio di righe di esempio del file CSV e spiegare dove sono le informazioni? – NSGod

risposta

6
NSString* fileContents = [NSString stringWithContentsOfURL:filename ...]; 
NSArray* rows = [fileContents componentsSeparatedByString:@"\n"]; 
for (... 
    NSString* row = [rows objectAtIndex:n]; 
    NSArray* columns = [row componentsSeparatedByString:@","]; 
... 

probabilmente si vorrà gettare in un paio di "stringTrimmingCharactersInSet" chiamate per tagliare gli spazi bianchi.

0

Suppongo che il nocciolo della domanda sia "come analizzare un file CSV", non "cosa fare con i dati una volta analizzati". In questo caso, controlla la libreria CHCSVParser. L'ho usato nei progetti prima e lo trovo molto affidabile. Può analizzare qualsiasi stringa o percorso file arbitrario in un NSArray di righe/colonne per te. Dopodiché, qualunque cosa tu faccia con i dati dipende da te.

1

Per quanto riguarda i tuoi avvertimenti:

Il codice produrrebbe un errore (non un avvertimento), in quanto è necessario dichiarare le proprietà nel file di interfaccia prima di sintetizzare nella sua attuazione. Probabilmente ti ricordi che @synthesize genera metodi di accesso per le tue proprietà. Inoltre, prima di utilizzare la direttiva @synthesize, è necessario utilizzare la direttiva @property, anche nell'interfaccia. Ecco un esempio:

@interface MyObject : NSObject { 
    NSString *myString; 
} 
@property (assign) NSString *myString; 
@end 

@implementation MyObject 
@synthesize myString; 
    // funky code here 
@end 

noti che la dichiarazione di proprietà è seguito da un tipo (assegnare in questo caso, che è il default). C'è un'ottima spiegazione su questo nel libro di Stephen G. Kochans: Programming in Objective-C 2.0


Ma assumendo per amor di discussione, che si omesso il file corretto @interface qui. Se si dichiara per la prima volta una proprietà in @interface e quindi si dichiara un'altra proprietà nel metodo, utilizzando lo stesso nome di variabile, la variabile del metodo avrà la precedenza sulla variabile di istanza.

Nel codice, basterebbe omettere la dichiarazione del nome della variabile, in questo modo:

dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil];  
array = [dataStr componentsSeparatedByString: @","]; 
Problemi correlati