重複の可能性:
Objective-Cですべての円周率を生成する方法
誕生日をpi番号で検索するために「amiinpi」を実装したいのですが、.txtファイルに100万シリーズのpi番号があります。このゲームを実装するためのヒントを教えてください。
最善の方法は何ですか?テキストファイルで生年月日を確認するにはどうすればよいですか?
前もって感謝します
重複の可能性:
Objective-Cですべての円周率を生成する方法
誕生日をpi番号で検索するために「amiinpi」を実装したいのですが、.txtファイルに100万シリーズのpi番号があります。このゲームを実装するためのヒントを教えてください。
最善の方法は何ですか?テキストファイルで生年月日を確認するにはどうすればよいですか?
前もって感謝します
NSString* str = [NSString stringWithContentsOfFile: @"path to your file" encoding: NSASCIIStringEncoding error: nil];
NSRange rng = [str rangeOfString: @"1989"]; //here is the range of the birth year 1989
1メガバイトは十分に小さいので、ロードしてからスキャンするのはかなり簡単です。少し賢くしたい場合は、ファイルをメモリにマップしてから、マップをスキャンすることができます(ファイル全体をメモリにロードする必要がなくなります。これは、数百MBのファイルでより重要になります)。
NSDataReadingOptions options = NSDataReadingMappedIfSafe | NSDataReadingUncached;
NSData *data = [NSData dataWithContentsOfFile:filename
options:options
error:nil];
NSString *string = [[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding];
NSRange range = [string rangeOfString:year];
[string release];
適切なエラー処理を追加できます。
NSStringのカテゴリを作成したら、次のメソッドを使用します。
- (NSArray *)occurrencesOfSubstring:(NSString *)string
{
NSMutableArray *result = [NSMutableArray array];
NSRange range = NSMakeRange(0, self.length);
NSUInteger len = self.length;
while (range.location != NSNotFound) {
range = [self rangeOfString:string options:0 range:range];
if (range.location != NSNotFound) {
NSRange resRange = range;
[result addObject:[NSValue valueWithRange:resRange]];
range = NSMakeRange(NSMaxRange(resRange), len - NSMaxRange(resRange));
}
}
return result;
}
検索された部分文字列の範囲の配列を返します。それが役に立てば幸い。