2012-03-15 19 views
0

私はゲームを作成しており、検索する文字列があるところまで来て、それらが実際にインポートするwords.txtファイルで定義された単語かどうかを確認しています。.txtファイルと一致する単語

私は客観的なC/IOSのファイルIOについてほとんど知っていません。検索によってsqliteとLuceneと何か関係があります。

文字列を確認するための簡単な辞書ルックアップに最適な方法は、words.txtの実際の辞書単語ですか?

+0

words.txtにはいくつの単語が含まれていますか? – sch

答えて

0

これは、あなたが言及していないsqliteデータベースにファイルを保存しない限り、sqliteとは関係ありません。

  1. (これはあなたが一度にロードしたくない巨大なファイル、この場合にはNSFileHandleを使用している場合を除く)、メモリにファイルをロードします:

    あなたはこのことだろう望むものを行うための最速の方法
    NSError* err; 
    NSString* words = [NSString stringWithContentsOfFile:@"words.txt" encoding:NSUTF8StringEncoding error:&err]; 
    // check err! 
    if (err) { 
        // handle errors 
    } 
    
  2. 単語をコレクション、たとえばNSArrayのインスタンスに転送します。私たちは、単語がファイルに昏睡状態で分離されていると仮定します。

    NSArray* wordsArray = [words componentsSeparatedByString:@","]; 
    
  3. チェックあなたの言葉は、アレイ内にある場合:

    NSString* wordWeLookFor = @"FooBar"; 
    NSUInteger index = [wordsArray indexOfObjectPassingTest: 
         ^(id obj, NSUInteger idx, BOOL *stop) { 
          *stop = [(NSString*)obj isEqualToString:wordWeLookFor] 
          return *stop; 
         }]; 
    if (index != NSNotFound) { 
        // Found! 
    } else { 
        // Not found! 
    } 
    

私はあなたが可能な問題を回避することを前提としてい複合語では、このためにステップ2と3が必要です。あなたのファイルにあまり多くの単語がなく、あなたが運が良ければ、rangeOfStringメソッドを使い、ステップ2と3をスキップすることができます。

+0

ありがとうございますが、インデックスのフォーマットに問題があります。私は "互換性のないブロックポインタ型"を取得していますが、ポインタの型はまったく同じです – gma

+0

は戻り値に*を追加する必要があるようです。だから return * stop – gma

+0

これは毎回見つかったが、これはナンセンスな言葉である... – gma

関連する問題