としてテキストファイルのデータを渡すこのフィドルを確認してください:https://jsfiddle.net/dp0y4hrw/16/Javascriptを、外部のテキストファイルを読み込み、パラメータ
は、これは文字列の配列で最長の複合語を見つけるために、JSです。
配列の代わりに、このプログラムは100,000行以上のテキストからなるローカルのtxtファイルを読みたいと思っています。次に、最長の複合語を見つけます。各行には1つの単語があります。
私はFileReaderを使用してデータを取得しようとしました。私は正しくデータを渡すことができましたが、 'addPrefix'と 'findPrefixes'の間の共有変数に問題がありました。
私はまた、非同期動作を説明するために、約束を使用してみました:
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) {
...
これはまだ私に問題を与えます。この状況でコンテンツを正しく処理できるように、ファイルを読み取る最良の方法は何ですか?
EDIT:
// 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);
});
EDIT 2:これは、入力されたテキストファイルの例です:
cat
cats
catsdogcats
dog
dogcatsdog
hippopotamuses
rat
ratcatdogcat
catratdograt
dogcatscats
期待される結果は次のとおりです。最長:ratcatdogcat、catratdograt ...第二最長:catsdogcats、dogcatscats。複合語の..number:5
何の問題あなたは '質問でjavascript'とリンクjsfiddleを持っている前の項目にマッチ? – guest271314
@ guest271314問題は、 'readFile(event)'を通して外部のテキストファイルのデータを読み込みたいのですが、そのように実装すると、 'current.word' object.keyは 'addPrefix'と' findPrefixes'。機能が動作しません。 – RJK
_ "'current.word' object.keyはaddPrefixとfindPrefixesの間で共有されません" - どの関数を最初に呼び出す必要がありますか?第2の関数に渡されるべき期待されるパラメータと呼ばれるべき第1の関数の期待される結果値は何ですか?第2の関数の期待される戻り値はどれくらいですか? – guest271314