如何处理文本文件中的不同类型的信息

时间:2010-11-09 15:13:55

标签: iphone objective-c cocoa-touch

我正在下载一个文本文件,并使用其中的信息创建多个对象。

我正在使用以下代码来实现此目的:

NSString *fileContents = [NSString stringWithContentsOfURL: readerView.url
                                                  encoding: NSUTF8StringEncoding 
                                                     error: NULL];

NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
for(NSString *line in lines)
{
    NSArray *params = [line componentsSeparatedByString:@","];
    NSString *label1 = [params objectAtIndex:0];
    NSString *label2 = [params objectAtIndex:1];
    float weight = [[params objectAtIndex:2] floatValue];
    int x1 = [[params objectAtIndex:3] intValue];
    int y1 = [[params objectAtIndex:4] intValue];
    int x2 = [[params objectAtIndex:5] intValue];
    int y2 = [[params objectAtIndex:6] intValue];
    int type = [[params objectAtIndex:7] intValue];

    [graph addComponents:label1:label2 :weight :x1 :y1 :x2 :y2 :type];
}

文本文件中的一行示例如下:

A,B,6.0,270,190,150,190,1

所以这很基本。我想要做的是文本文件的第一行或最后一行,有一个URL会触发另一个图像下载。我无法想到实现这一目标的最佳方法。在我看来,我在伪代码中想到这样的事情:

如果(line = first line)
触发下载
否则
通过参数。

2 个答案:

答案 0 :(得分:1)

我会尝试检查该行是否采用有效的参数格式。如果没有,请尝试解析为URL。

假设网址中不包含7个逗号,

for(NSString *line in lines) {
    NSArray *params = [line componentsSeparatedByString:@","];
    if ([params count] == 8) {
       // go through params
    } else {
       NSURL* url = [NSURL URLWithString:line];
       if (url) {
          // trigger download...
       }
    }
}

这样,URL就可以放在文件的任何位置。

答案 1 :(得分:1)

KennyTM是对的,但我会反过来做,因为,是某些方案的有效URL字符而对其他方案无效,因此有可能(如果不可能)得到误报。如果该行不是有效的URL,则将该行解析为URL将返回nil,然后您可以将该行解析为缺少URL时所期望的格式化数据。

for(NSString *line in lines) {
    NSURL* url = [NSURL URLWithString:line];
    if (url) {
        // trigger download...
    } else {
        NSArray *params = [line componentsSeparatedByString:@","];
        // Do stuff with params
    }
}