使用Objective C查找并替换大文件,计算替换次数

时间:2012-07-30 16:36:21

标签: objective-c regex xcode macos

我需要使用目标C在文件中执行查找和替换(使用正则表达式)。

我目前的解决方案是这样的:

NSString *string = [NSString stringWithContentsOfFile:sourceFile encoding:NSStringEncodingConversionAllowLossy error:nil];
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:[toFind stringValue] options:NSRegularExpressionCaseInsensitive error:&error];

NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:[toReplace stringValue]];
[modifiedString writeToFile:sourceFile atomically:YES]

此解决方案存在两个问题:

1 - 我无法获得更换的次数

2 - 我认为加载近300MB的文件时速度并不快,因为我将整个文件作为字符串加载到内存中。

如何获得更换次数,并优化我的解决方案,即使是大文件也能获得良好的性能?

提前致谢

1 个答案:

答案 0 :(得分:0)

在您替换匹配项之前调用

numberOfMatchesInString将告知您将替换事件的次数。不是将整个文件加载到内存中,而是将其逐个零碎并保留一个计数器,将numberOfMatchesInString的结果添加到。