1

大きなテキスト ファイル (約 10 MB) があります。テキスト ファイルには次のような値があります (行間に空の行がないため、ここで適切に書式設定できませんでした)。

;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この例に従ってこれを実行しようとしました: http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data

しかし、メモリ警告を受け取り、すべてクラッシュしました。

を使用してこれをNSScanner行う必要がありますか?もしそうなら、誰かがそれを行う方法の例を教えてもらえますか?

ありがとう!

4

2 に答える 2

0

ほとんどの場合、特にメモリを保持しようとしている場合NSScannerは、よりも適しています。componentsSeparatedByString:

ファイルは次のようなループで解析できます。

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
}

無効なファイルを取得した場合に備えて、おそらくこれにエラーチェックコードを追加する必要があります。

于 2010-12-10T09:31:59.417 に答える
0

高速列挙を使用する必要があります。を使用するよりもはるかに優れていobjectEnumeratorます。これを試して

for (NSString *word in words) {
    // do the thing you need
}
于 2010-12-10T09:22:52.097 に答える