-1

我被困住了!我不能让它工作。

这就是我打算做的:Io 在 .txt 文件中有一些数据,我最终想用这些数据填充 NSArray!这就是我所做的:

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"];
NSArray *objectsArray = [[NSArray alloc]initWithContentsOfFile:urlString];
NSLog(@"objectsArray is: %@", objectsArray);

我从最后一行得到的唯一输出是;

    objectsArray is: (null)

txtFile 中的对象用逗号(,) 分隔。

请帮我!

4

4 回答 4

5

您发布的代码要求该文件是一个 plist 类型的文件,array它是根元素。如果您的txt文件只是一个普通的旧文本文件,并且您希望将每一行文本放入数组中,那么您需要一种完全不同的方法。

一种选择是将文本文件加载到NSString变量中,然后使用componentsSeparatedByCharactersInSet:传入的newlineCharacterSet.

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"];
NSString *rawText = [NSString stringWithContentsOfFile:urlString encoding:NSUTF8StringEncoding error:nil];
NSArray *objectsArray = [rawText componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

真正的代码会正确处理错误。

编辑:我刚刚注意到您声明文本文件是 CSV 文件。这需要更多的处理。CSV 文件是否不止一行?每一行的每个值应该如何存储?

于 2013-01-26T23:47:51.110 回答
2

为了使用initWithContentsOfFile:,您的文件必须是属性列表格式,而不是逗号分隔的格式。查看属性列表编程指南。

于 2013-01-26T23:46:06.340 回答
1

正如我从您使用的扩展名中看到的那样,这可能不是 plist 文件。

您应该使用包含数组的 plist 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>hello</string>
</array>
</plist>
于 2013-01-26T23:45:36.140 回答
1

使用CHCSVParser. 给它一个你的文件的路径,它会给你一大堆NSStrings。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"];

NSError *error = nil;
NSArray *rows = [NSArray arrayWithContentsOfCSVFile:path encoding:NSUTF8StringEncoding error:&error];
if (rows == nil) {
  //something went wrong; log the error and exit
  NSLog(@"error parsing file: %@", error);
  return;
}

此时, rows 是一个数组。rows 中的每个元素本身就是一个数组,表示 CSV 文件中的一行。该数组的每个元素都是一个 NSString。

于 2013-01-27T04:12:43.143 回答