2012-04-18 20 views
5

Kod yazarken yeni oluyorum, bu basit bir soru gibi görünüyorsa lütfen beni affedin.Bir CSV Dosyasından Nesne C Kullanarak Bir Dizi Oluşturma

Harita üzerinde koordinatları çizmeye çalışıyorum.

Bir CSV dosyasını okumak ve bilgileri iki ayrı diziye aktarmak istiyorum.

ilk dizi NSArray * towerInfo olacak

saniye (enlem, boylam ve kule başlığı ihtiva eden), NSArray * ilk dizinin aynı sayısı indeksi ile bölgesi (ihtiva eden kule başlığı ve bölge).

Esasen, ihtiyacım olduğuna inanıyorum;

1) bir dizeye dosya .....

2) her ayrıştırmadığımız geçici bir diziye/n/r dizesi bölmek ......

3) ilmek oku Temp dizisi boyunca ve bu bilgiyi iki ana depolama dizisine eklemeden önce her seferinde bir kule ve bölge nesnesi oluşturun.

Bu doğru işlem mi ve eğer öyleyse, bu kodu almak için gerçekten uğraşırken bazı örnek kodlar gönderebilecek biri var mı?

Önceden teşekkürler.

Chris.

Kodumun bir örneğini göstermek için bunu düzenledim.

1) "yerel veri bildirimi" dataStr "gizler örnek değişkeni 2)" alma "bildirimi alıyorum sorununu yaşıyorum.

Sanırım bunların ne anlama geldiğini anladım ama nasıl geçeceğimi bilmiyorum. Program derler ve çalışır, ancak günlük "dizinin boş olduğunu" söyler.

#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 

} 

Herhangi bir ek yardım çok takdir edilecektir. Şimdiye kadar verilen yanıtlar için teşekkürler.

+0

ilk yanınızda bazı şey yapmak zorunda ve u batırdığımda nerede o denemeler arasında bazı kod sonrası ve daha sonra size denemeniz için size yardımcı olabiliriz. –

+0

CSV dosyasının birkaç örnek satırını verebilir ve bilginin nerede olduğunu açıklayabilir misiniz? – NSGod

cevap

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

Muhtemelen birkaç "stringTrimmingCharactersInSet" atmak isteyeceksiniz boşluk kırpmaya çağırır.

0

Sorunun özünün "ayrıştırıldıktan sonra verilerle ne yapılacağını" değil "bir CSV dosyasını nasıl ayrıştırılacağını" varsayıyorum. Durum buysa, CHCSVParser kitaplığına bakın. Daha önce projelerde kullandım ve çok güvenilir buldum. Herhangi bir rasgele dizeyi veya dosya yolunu sizin için bir NSArray satır/sütununa ayrıştırabilir. Bundan sonra, veri ile ne yaparsanız yapın, size kalmış.

1

ilgili sizin uyarılar:

Eğer uygulanmasında sentez önce arayüz dosyasında özelliklerini beyan etmek gerek çünkü bir hata (bir uyarı) üretecektir Kodunuz. Muhtemelen, @synthesize'un mülkleriniz için erişim yöntemleri oluşturduğunu unutmayın. Ayrıca, @synthesize yönergesini kullanmadan önce, arabirimde de @property yönergesini kullanmanız gerekir. İşte bir örnek: özellik bildirimi bir tür izler olduğunu

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

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

Not (varsayılan bu durumda, içinde atama). Stephen G. Kochans kitabında bu konuda mükemmel bir açıklaması vardır: Buraya doğru @interface dosyayı ihmal olduğunu Programming in Objective-C 2.0


Ama tartışma adına varsayarak. @interface öğesinde bir özellik bildirir ve yönteminizde aynı değişken adını kullanarak başka bir özellik bildirirseniz, yöntem değişkeni örnek değişkenine göre öncelikli olur. Kodunuzda

, o kadar gibi, değişken adının beyan atlamak için yeterli olacaktır:

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