Javascript读取外部文本文件,将文本文件数据作为参数

时间:2016-09-19 03:29:15

标签: javascript

请检查这个小提琴:https://jsfiddle.net/dp0y4hrw/16/

这是JS在字符串数组中找到最长的复合词。

我想让这个程序读取一个包含超过100,000行文本的本地txt文件,而不是数组。然后找到最长的复合词。每行有一个单词。

我尝试使用FileReader获取数据。我能够正确传递数据,但在“addPrefix”和“findPrefixes”之间的一些共享变量给我带来了麻烦。

我还尝试使用promise来解释异步行为:

function readFile(event) {  
  var file = event.target.files[0]; 

  if (file) {   
    new Promise(function(resolve, reject) {      
      var reader = new FileReader();      
      reader.onload = function (evt) {      
      resolve(evt.target.result);      
      };     

      reader.readAsText(file);     
      reader.onerror = reject;   
     })    

     .then(findLongestWord)   
     .catch(function(err) {     
       console.log(err)
     });  
   }
 }

document.getElementById('file').addEventListener('change', readFile, false);

function findLongestWord(data) {
...

这仍然给我一个问题。读取文件的最佳方法是什么,以便在这种情况下我能正确处理内容?

编辑:

// adds word as a prefix
var addPrefix = function (word) {
  var i  = 0;
  var current = prefixes;
  var char;

  while (char = word[i++]) {
    if (!current[char]) {
      current[char] = {};
    }
      current = current[char];      
  }
  current.word = true;
  return current.word; //RETURNING CURRENT WORD HERE
};

// Finds the longest prefix we can make using the word.
var findPrefixes = function (word) {
  var prefix = '';
  var current = prefixes;
  var found  = [];
  var i  = 0;
  var char;

  while (char = word[i++]) {
    if (!current[char]) { 
      break; 
    }
    // Move to the next character and add to the prefix.
    current = current[char];
    prefix += char;

    if(current.word)
    {
      found.push(prefix);
    }
  }
  return found;
};

//for each word in list, add to prefix
list.forEach(function (word) {
  var prefix;

// If we can find a closest possible word, it may be possible to create a
// compound word - but we won't be able to check until we reach the end.
if ((prefix = findPrefixes(addPrefix())) && prefix.length) { //FINDPREFIXES USING ADDPREFIX HERE
  prefixMatch.push([ word, prefix ]);

}

// Insert the word into the prefix tree.
addPrefix(word);
});

编辑2:这是输入文本文件的示例:

cat
cats
catsdogcats
dog
dogcatsdog
hippopotamuses
rat
ratcatdogcat
catratdograt
dogcatscats

预期结果是:最长:ratcatdogcat,catratdograt ...第2长:catdogcats,dogcatscats ...复合词数:5

1 个答案:

答案 0 :(得分:2)

使用view_birth_date.empty_value_display = '???' RegExp

  

/\w+/g匹配基本拉丁字母表中的任何字母数字字符,   包括下划线。

     

\w匹配前一项x 1次或更多次

x+