2010-11-09 56 views
0

我正在下载一个文本文件并使用其中的信息来创建多个对象。如何处理文本文件中的不同类型的信息

我用下面的代码来实现这一目标:

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。我想不出什么是实现这一目标的最佳方式。在我的脑海里,我想在伪代码是这样的:

如果(行=第一行)
触发下载
其他
经过PARAMS。

回答

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 
    } 
} 
+0

我刚试过这个,它似乎没有检查它是否是一个URL。我在'if(url)'之后放了一个NSLog,并且它看起来不管它是否是url都被打印出来。 – 2010-11-10 09:51:51

1

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

假设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可以在任何地方的文件中放置。

+0

是的,这是伟大的工作!我知道我想做什么,却无法想到一个有效的方法。谢谢Kenny! :) – 2010-11-09 15:44:07

+0

我似乎有问题'NSURL URLWithString:line'不按预期工作。我已经放置了一个断点并遍历代码,即使当一个不是URL的字符串被传递给它时,变量'url'也会被设置。我想如果是这样,那么它会返回零? – 2010-11-10 09:56:12

+0

好吧我已经找到了一个奇怪的原因,为什么发生这种情况,但我不明白为什么。基本上,为了保持我的文本文件整洁,我在一些参数中加入了一些空格。 E.G - 'B,C,3.0,150,190,30,40,1'在调试的时候,我偶然发现有空格的行可以正常工作,但是没有空格的行被当作网址。任何想法为什么这是? – 2010-11-10 10:23:16

相关问题