在巨大的文本文件中查找字符串

时间:2014-12-01 09:25:09

标签: ios swift uisearchbar

我正在开发一个内部应用程序,它将在一个文本文件(约60,000行)中搜索。 用户将在他的iPhone上的UISearchBar中键入一个String,App将返回String所在的行。

我就是这样做的。

首先,我将文本文件拆分为名为 entriesInLine 的数组:

    var entriesInLine: [String] = []

    let fileWithEntries = NSBundle.mainBundle().pathForResource("database", ofType: "txt")
    var entriesFromFile = String(contentsOfFile: fileWithEntries!, encoding: NSUTF8StringEncoding, error: nil)

    if let content = entriesFromFile {
        self.entriesInLine = content.componentsSeparatedByString("\n")
        println(self.entriesInLine.count)
    }

然后我希望用户能够使用UISearchBar搜索数据库。这是我的搜索方法:

 func filterEntries(searchText: String) {
    for var i = 0; i < self.entriesInLine.count; i++  {
        if ( self.entriesInLine[i].rangeOfString(searchText) != nil) {
            self.filteredEntries.append(extractEntry(entriesInLine[i]))                            

        }

这是我的 searchDisplayController 方法:

func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool {
    self.filterEntries(searchString)

}

一切都很有效,但由于阵列很大,所以它太慢了。

您是否知道在文本文件中搜索内容的更快捷方式?

我真的很感谢你的帮助!

谢谢

1 个答案:

答案 0 :(得分:2)

试试这个我已经过测试。

 var bundle:NSString = NSBundle.mainBundle().pathForResource("File", ofType: "")!;
 var entriesFromFile:NSString = NSString.stringWithContentsOfFile(bundle, encoding: NSUTF8StringEncoding, error: &attributeError) as NSString;
 var range:NSRange=entriesFromFile.rangeOfString("rrr");
 var substring:NSString = entriesFromFile.substringToIndex(range.location);
 var arr:NSArray = substring.componentsSeparatedByString("\n");
 print("Occurence of String in File on Line Number",arr.count);