Разбор текстового файла в задаче C - PullRequest
4 голосов
/ 23 сентября 2011

я пытаюсь разобрать текстовый файл, сохраненный в doc dir, ниже показан код для него

NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docDirPath=[filePaths objectAtIndex:0];
NSString *filePath=[docDirPath stringByAppendingPathComponent:@"SKU.txt"];
NSError *error;
NSString *fileContents=[NSString stringWithContentsOfFile:filePath];
NSLog(@"fileContents---%@",fileContents);   
if(!fileContents)
NSLog(@"error in reading file----%@",error);
NSArray *values=[fileContents componentsSeparatedByString:@"\n"];
NSLog(@"values-----%@",values);

NSMutableArray *parsedValues=[[NSMutableArray alloc]init];
for(int i=0;i<[values count];i++){
    NSString *lineStr=[values objectAtIndex:i];
    NSLog(@"linestr---%@",lineStr);
    NSMutableDictionary *valuesDic=[[NSMutableDictionary alloc]init];
    NSArray *seperatedValues=[[NSArray alloc]init];
    seperatedValues=[lineStr componentsSeparatedByString:@","];
    NSLog(@"seperatedvalues---%@",seperatedValues);
    [valuesDic setObject:seperatedValues forKey:[seperatedValues objectAtIndex:0]];
    NSLog(@"valuesDic---%@",valuesDic);
    [parsedValues addObject:valuesDic];
    [seperatedValues release];
    [valuesDic release];
}
NSLog(@"parsedValues----%@",parsedValues);
NSMutableDictionary *result;
result=[parsedValues objectAtIndex:1];
NSLog(@"res----%@",[result objectForKey:@"WALM-FT"]);

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

Ответы [ 2 ]

8 голосов
/ 23 сентября 2011

Вместо этого используйте:

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator

, оно охватывает несколько различных символов новой строки.

Пример:

NSArray *values = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (NSString *lineStr in values) {
    // Parsing code here
}

ALso seperatedValues переполнен.Сначала создается с помощью alloc init, затем на следующей строке он заменяется методом componentsSeparatedByString.Итак, первая потеря потеряна без освобождения, это утечка.Позже seperatedValues, созданный componentsSeparatedByString, освобождается, но componentsSeparatedByString автоматически освобождает его, что является переизбытком;

Решите все проблемы сохранения / освобождения / автоматического выпуска с ARC (Автоматический подсчет ссылок).

Вот версия, которая использует удобные методы и опускается при выпуске:

NSArray *values = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (NSString *lineStr in values) {
    NSArray *seperatedValues = [lineStr componentsSeparatedByString:@","];
    NSString *key = [seperatedValues objectAtIndex:0];
    NSDictionary *valuesDic = [NSDictionary dictionaryWithObject:seperatedValues forKey:key];
    [parsedValues addObject:valuesDic];
}
NSLog(@"parsedValues---%@",parsedValues);
0 голосов
/ 23 сентября 2011

Вы уверены, что в вашем текстовом файле используется разделитель строк \n, а не \r (или \r\n)?

Возможно, проблема в этом, объясняя, почему вам не удается разбить файлы на разные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...