2011-11-11 39 views
0

我正在將sowpods字典嵌入AS3中的數組中,然後使用indexOf()提交搜索以驗證該單詞的存在。AS3:在數組上具有indexOf()的大型文本文件

當我加載一個較小的文本文件,它似乎工作,但不是更大。由於該文件是在編譯過程中嵌入的,因此不應該有加載的事件來正確地進行聆聽?

代碼:

package { 
    import flash.display.MovieClip; 

    public class DictionaryCheck extends MovieClip { 

     [Embed(source="test.txt",mimeType="application/octet-stream")] // Works fine 10 rows. 
       //[Embed(source="sowpods.txt",mimeType="application/octet-stream")] //Won't work too large. 
     private static const DictionaryFile:Class; 

     private static var words:Array = new DictionaryFile().toString().split("\n"); 

     public function DictionaryCheck() { 
      containsWord("AARDVARKS"); 
     } 

     public static function containsWord(word:String):* { 
      trace(words[10]); //Traces "AARDVARKS" in both versions of file 
      trace((words[10]) == word); // Traces true in shorter text file false in longer 
      trace("Returning: " + (words.indexOf(word))); // traces Returning: 10 in smaller file 
      if((words.indexOf(word)) > -1){ 
       trace("Yes!"); // traces "Yes" in shorter file not in longer 
      } 
     } 
    } 
} 

回答

0

以我的經驗(我沒有直接說明文件,以支持我),Flash無法打開非常大的文本文件。我以前在導入字典時遇到了同樣的問題。

我最終做的是將字典轉換成一個ActionScript類,這樣我就不需要加載文件並將其解析爲字典以便更好地搜索,字典已經被解析並存儲在數組。由於陣列成員已經排序,我使用簡單的半間隔搜索功能(http://en.wikipedia.org/wiki/Binary_search_algorithm)來確定字典是否包含該單詞。

基本上,你的字典是這樣的:

public class DictSOWPODS { 
    protected var parsedDictionary : Array = ["firstword", "secondword", ..., "lastword"]; // yes, this will be the hugest array initialization you've ever seen, just make sure it's sorted so you can search it fast 

    public function containsWord(word : String) : Boolean { 
     var result : Boolean = false; 
     // perform the actual half-interval search here (please do not keep it this way) 
     var indexFound : int = parsedDictionary.indexOf(word); 
     result = (indexFound >= 0) 
     // end of perform the actual half-interval search (please do not keep it this way) 
     return result; 
    } 
} 

你失去了使用的,而不是一個文本文件中的AS類的唯一的事情是,你不能在運行時改變它(除非你使用SWC來持有類),但由於您已經將文本文件嵌入到.swf文件中,因此這應該是最好的解決方案(不需要加載和解析文件)。 重要的是要注意,如果你的字典真的很大,閃存編譯器最終會爆炸。

編輯:

我改變我這裏http://www.isc.ro/en/commands/lists.html發現到工人階級的SOWPODS,在這裏獲得: http://www.4shared.com/file/yQl659Bq/DictSOWPODS.html