解析目标C中的文本文件

Dro*_*dme 4 iphone objective-c text-parsing ios

我正在尝试解析保存在doc dir下面的文本文件show是它的代码

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"]);
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,当我尝试打印lineStr即文本文件的数据时,它打印为单个字符串,因此我无法逐行获取内容,请帮我解决此问题.

zap*_*aph 8

而是使用:

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator
Run Code Online (Sandbox Code Playgroud)

它涵盖了几个不同的换行符.

例:

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

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);
Run Code Online (Sandbox Code Playgroud)