Iphone NSScanner与由字符串分离的组件

Iphone NSScanner与由字符串分离的组件,iphone,objective-c,xcode,nsscanner,Iphone,Objective C,Xcode,Nsscanner,我有一个大约10MB的大文本文件。在文本文件中有一些值,如行之间没有空行,我无法在此处正确设置格式: ;string1;stringValue1; ;string2;stringValue2; ;string3;stringValue3; ;string4;stringValue4; 我正在使用一个非常难看的解决方案,将所有“stringX”值解析为一个数组,将“stringValueX”解析为另一个字符串: words = [rawText componentsSeparatedB

我有一个大约10MB的大文本文件。在文本文件中有一些值,如行之间没有空行,我无法在此处正确设置格式:

;string1;stringValue1;

;string2;stringValue2;

;string3;stringValue3;

;string4;stringValue4;
我正在使用一个非常难看的解决方案,将所有“stringX”值解析为一个数组,将“stringValueX”解析为另一个字符串:

  words = [rawText componentsSeparatedByString:@";"];
  NSEnumerator *word = [words objectEnumerator];

  while(tmpWord = [word nextObject]) {

   if ([tmpWord isEqualToString: @""] || [tmpWord isEqualToString: @"\r\n"] || [tmpWord isEqualToString: @"\n"]) {
    //   NSLog(@"%@*** NOTHING *** ",tmpWord);

   }else { // here I add tmpWord the arrays...
我尝试使用NSScanner通过以下示例来实现这一点:

但我收到了内存警告,然后它就崩溃了

我应该使用NSScanner进行此操作吗?如果是,谁能给我一个如何进行此操作的示例


谢谢

您应该使用快速枚举。它比使用objectEnumerator要好得多。试试这个

for (NSString *word in words) {
    // do the thing you need
}
在大多数情况下,NSScanner比字符串分隔的组件更适合,尤其是在试图保留内存的情况下

您的文件可以通过如下循环进行解析:

while (![scanner isAtEnd]) {
   NSString *firstPart = @"";
   NSString *secondPart = @"";

   [scanner scanString: @";" intoString: NULL];
   [scanner scanUpToString: @";" intoString: &firstPart];

   [scanner scanString: @";" intoString: NULL];
   [scanner scanUpToString: @";" intoString: &secondPart];

   [scanner scanString: @";" intoString: NULL];

   // TODO: add firstPart and secondPart to your arrays
}

您可能需要添加错误检查代码,以防收到无效文件

在移动设备上的RAM中存储的东西太多了!您省略的代码也会很有趣。你可以用仪器检查你的内存消耗。谢谢斯文!我马上就试试这个!它工作得很好!它比字符串分隔的组件要好得多:。我觉得它慢了一点,但我觉得它更健壮。你是觉得它慢了还是你测量过了?