2012-07-30 94 views
0

我需要用客觀的C.查找並與目標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] 

有2個問題,這個解決方案:

1 - 我不能出現的次數取代

2 - 我認爲這是不加載近300MB文件時真的很快,因爲我將整個文件作爲字符串加載到內存中。

我如何獲得所做更換的次數,並優化我的解決方案,即使對於大文件也有良好的性能?

在此先感謝

+3

解決方案:不要使用'NSRegularExpression',找到一個好的C庫。在那裏有更好的解決方案,並且爲了上帝的愛,使用'mmap'而不是將整個文件讀入'NSString'。 – 2012-07-30 16:40:11

回答

0

numberOfMatchesInString更換比賽將讓你知道多少次的出現將被替換之前調用。不要將整個文件加載到內存中,而應該零碎地完成並保留一個計數器,以便將numberOfMatchesInString的結果添加到內存中。