NSScanner не импортирует данные - PullRequest
       5

NSScanner не импортирует данные

0 голосов
/ 26 сентября 2010

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

Это код, который я использую;

//Find import file;

NSString *defaultCSVPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"csv"];

//Get the data into a string

NSString *fileString = [NSString stringWithContentsOfFile:defaultCSVPath encoding:NSUTF8StringEncoding error:nil];

if ( nil == fileString ) {
    NSLog(@"Could not open file data.csv");
    abort();
}
// Create the scanner
NSScanner *scanner = [NSScanner scannerWithString:fileString];

// Ignore new lines
[scanner setCharactersToBeSkipped:
 [NSCharacterSet characterSetWithCharactersInString:@"\n"]];

NSString *sNumber = @"";
NSString *sTitle = @"";

//Gets to here and this expression is never TRUE
while ( [scanner scanString:@"," intoString:&sNumber] && [scanner scanString:@"," intoString:&sTitle]) {
    NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
}

Пример данных, которые я использую:

A15Q,Test1
F74443AAZ,Test2

Когда я отслеживаю код, я попадаю в предложение while, и оно просто пропускает его.

1 Ответ

0 голосов
/ 26 сентября 2010

Не уверен, почему вы инициализируете sNumber и sTitle в @ ""; nil лучше по умолчанию (или вы можете просто не инициализировать их).

[scanner scanString:@"," intoString:&foo] ожидает увидеть запятую и возвращает запятую в foo (это делает это для согласованности и (я думаю) Unicode wotsits).

Вы, вероятно, хотите сделать что-то вроде этого:

  1. Читать все до запятой.
  2. Пропустить запятую.
  3. Читать все до новой строки.
  4. Пропустить перевод строки.

(И мне нужно кое-что воткнуть, чтобы форматирование по какой-то причине работало.)

while (
     [scanner scanUpToStringString:@"," intoString:&sNumber]
  && [scanner scanString:@"," intoString:NULL]
  && [scanner scanUpToString:@"\n" intoString:&sTitle]
  && [scanner scanString:@"\n" intoString:NULL]
) {
  NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
}

Если вы пытаетесь проанализировать CSV, у него есть свои проблемы:

  • Возможно, вы хотите рассматривать \ r \ n как новую строку.
  • Он не обрабатывает пустые строки или строки без запятой.
  • Не обрабатывает строки в кавычках (например, "a,b","c,d,e,f").
...