2013-10-02 3 views
0

Хорошо, чтобы начать, я начинаю, поэтому я все еще участвую. поэтому у меня есть этот файл с городами мира. Это выглядит следующим образом:Разделение файла CSV на отдельные массивы

 City,Country,Latitude,Longitude 
    Aberdeen, Scotland,57.15,-2.15 
    Adelaide, Australia,-34.91666667,138.6 
    Algiers, Algeria,36.83333333,3 
    Amsterdam, Netherlands,52.36666667,4.883333333 
    Ankara, Turkey,39.91666667,32.91666667 
    AsunciÛn, Paraguay,-25.25,-57.66666667 
    Athens, Greece,37.96666667,23.71666667 
    Auckland, New Zealand,-36.86666667,174.75 
    Bangkok, Thailand,13.75,100.5 

я должен поместить все эти файлы в отдельных параллельных массивов, я предположим, что для вычисления расстояния с помощью широты и долготы, то не большое дело, дело в том, что я хочу поместите их в массив C-стиля, и я не знаю, как это сделать в Objective C. Я знаю, что вы можете использовать NSArray, но это, похоже, не работает для меня. как я могу это сделать в Objective c. я уже прочитал файл в NSString, делая

 anotherLine = [NSString stringWithContentsOfFile:docDirectory encoding:NSStringEncodingConversionAllowLossy error:nil]; 

// docDirectory где мой файл

Как я могу поставить этот NSString на 4 отдельные массивы (города [Макс], страны [Макс], широта [макс.], долгота [макс.]). И снова, я все еще новичок на объективе c, я знаю некоторые вещи на C++, поэтому я стараюсь сделать это как можно ближе к c.

+0

Читать NSString спецификации - componentsSeparatedByString, и др. –

+0

@HotLicks вы можете привести мне пример? – OPJ

+0

Можете ли вы прочитать спецификацию? Сначала разбиваем на строки, затем каждую строку на столбцы, а затем присваиваем значения столбцам их отдельным массивам. Очень просто, и все, что вам нужно, находится прямо в спецификации NSString (возможно, NSMutableArray). –

ответ

-1

Вы можете попробовать это:

NSMutableArray* cities = [NSMutableArray array]; 
NSMutableArray* countries = [NSMutableArray array]; 
NSMutableArray* latitude = [NSMutableArray array]; 
NSMutableArray* longitude = [NSMutableArray array]; 

// read everything from text 
NSString* fileContents = 
[NSString stringWithContentsOfFile:docDirectory encoding:NSStringEncodingConversionAllowLossy error:nil]; 

// first, separate by new line 
NSArray* allLinedStrings = 
[fileContents componentsSeparatedByCharactersInSet: 
[NSCharacterSet newlineCharacterSet]]; 


[allLinedStrings enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if (idx > 0) //Ignore first line column header 
    { 
     NSArray* columnsFile = [((NSString*)obj) componentsSeparatedByString:@","]; 
     [cities addObject:[columnsFile objectAtIndex:0]]; 
     [countries addObject:[columnsFile objectAtIndex:1]]; 
     [latitude addObject:[columnsFile objectAtIndex:2]]; 
     [longitude addObject:[columnsFile objectAtIndex:3]]; 
    } 
}]; 
+0

Можете ли вы объяснить мне метод enumarateObjectsUsingBlock? – OPJ

+0

Это эквивалентно для утверждения для чтения NSArray Apple doc https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html – tdelepine

+0

@Juan - это запутанный цикл 'for' , –

Смежные вопросы