如何从文本文件创建NSNumbers数组?

时间:2013-07-16 12:16:14

标签: ios objective-c file nsarray nsnumber

我正在测试排序算法,我有不同的文本文件,其中包含如下所示的值。

2345

6789

4567

我尝试过这样的事情。

NSString *title = @"test";
NSString *type = @"rtf";

NSMutableArray *test4 = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:title ofType:type]];

但结果是(null)数组。

我知道在某些时候我必须将这些值转换为NSNumber个对象,但是我对Objective-C有点遗失。

有人可以给我一些建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用NSScanner

NSError *error = nil;
NSString *filename = [[NSBundle mainBundle] pathForResource:title ofType:type];
NSString *fileContents = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error];
if (error) NSLog(@"%s: stringWithContentsOfFile error: %@", __FUNCTION__, error);
NSScanner *scanner = [NSScanner scannerWithString:fileContents];

NSMutableArray *array = [NSMutableArray array];
NSInteger i;
while ([scanner scanInt:&i]) {
    [array addObject:@(i)];
}

有关扫描仪,将文件读入字符串以及常规字符串编程的讨论,请参阅String Programming Guide

答案 1 :(得分:0)

如果您将扩展名更改为.txt(当然将其保存为纯文本),您可以阅读它们。

当你把数字放在另一个

之下时,我写了一些代码
1234

2344

2345

这里是我使用的代码。

NSString *title = @"test";
NSString *type = @"txt";

NSString *file = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:title ofType:type] encoding:NSUTF8StringEncoding error:nil];
NSArray *numberList = [[file stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]componentsSeparatedByString:@"\n"];

NSMutableArray *test4 = [[NSMutableArray alloc] init];
int lastItem = 0; 

for (NSString *listItem in numberList)
{
   //this is added because you most surely have a \n as last item and it will convert to 0
   if(lastItem < listItem.count - 1)
   [test4 addObject:[NSNumber numberWithInt:listItem.integerValue]];
   lastItem++;
}