【问题标题】:Search within HTML files在 HTML 文件中搜索
【发布时间】:2010-05-26 11:43:42
【问题描述】:

在我的 iPhone 项目中,我有许多 HTML 文件,每个文件中都有不同的文本和图像内容。我需要实现搜索工具,它会返回匹配关键字的结果(HTML 文件名)。任何人都可以有任何线索,我怎样才能做到这一点?谢谢

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    您可以使用它在多个 html 文件中搜索文本:

    NSError *err = nil;
    NSString *pageHTML = [NSString stringWithContentsOfFile:htmlfilePath encoding:NSUTF8StringEncoding error:&err];
    
    if(err)
    {
        pageHTML = [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&err];
    
    }
    
    
    if([searchTxtField.text length])
    {
        NSRange range1 = [pageHTML rangeOfString:searchTxtField.text options:NSCaseInsensitiveSearch];
        if(range1.location != NSNotFound)
        {
            NSString *stringFound = [pageHTML substringWithRange:range1];   
        }
        else
        {
            //Load the next html page.  
        }
    }
    

    【讨论】:

      【解决方案2】:
      NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:  @"Documents"];
      NSFileManager *localFileManager=[[NSFileManager alloc] init];
      NSDirectoryEnumerator *dirEnum =[localFileManager enumeratorAtPath:docsDir];
      
      NSString *file;
      NSString *stringYourelookingFor=@"String you're lookign for";
      
      NSArray *matchingFiles=[NSMutableArray array];
      while (file = [dirEnum nextObject])
          if ([[file pathExtension] isEqualToString: @"html"])
              NSString *currentFile = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:&err];
              if ([currentFile rangeOfString:stringYourelookingFor options:NSCaseInsensitiveSearch]!=NSNotFound)
                  [matchingFiles addObject:file]
          }    
      }
      
      [localFileManager release];
      

      最后 matchingFiles 将包含所有匹配 stringYourelookingFor 的文件

      【讨论】:

        【解决方案3】:

        其他两个答案都将非常缓慢且占用大量内存,因为它们要求您将磁盘上的每个文件都读入内存。

        我建议在用户想要搜索 HTML 文件之前创建自己的索引,然后简单地搜索索引。这正是 Core Data 所擅长的。

        【讨论】:

          【解决方案4】:

          CLucene 是 C++ 中 Lucene 搜索库的实现。 http://sourceforge.net/projects/clucene/ 我以前见过它在公司环境中使用过。它使用倒排索引并根据相关性返回结果。您需要存储它将创建的索引。

          【讨论】:

            猜你喜欢
            • 2018-07-31
            • 2016-01-19
            • 2012-01-20
            • 2012-08-26
            • 1970-01-01
            • 2021-12-23
            • 1970-01-01
            • 2014-08-17
            • 1970-01-01
            相关资源
            最近更新 更多