我正在编写一个脚本来读取和搜索上传到网站的文本文件中的关键字。我知道如何读取字符串并使用RegEx报告单词的出现次数,但是我无法弄清楚如何在加载后从fileReader访问文本。我想通过点击"开始编码"来调用此脚本。 FileReader完成工作后的按钮。我创建了一个功能来完成这项工作,但我无法弄清楚如何访问文件阅读器文本。谢谢你的帮助!
我从这里获得了fileReader的脚本How to read text file in JavaScript
<!DOCTYPE html>
<html>
<head>
<title>Read File (via User Input selection)</title>
<button onclick="myFunction()">Start Coding</button>
<script type="text/javascript">
alert ("Please insert your text in the box below and we will begin searching")
var reader; //GLOBAL File Reader object for demo purpose only
/**
* Check for the various File API support.
*/
function checkFileAPI() {
if (window.File && window.FileReader && window.FileList && window.Blob) {
reader = new FileReader();
return true;
} else {
alert('The File APIs are not fully supported by your browser. Fallback required.');
return false;
}
}
/**
* read text input
*/
function readText(filePath) {
var output = ""; //placeholder for text output
if(filePath.files && filePath.files[0]) {
reader.onload = function (e) {
output = e.target.result;
displayContents(output);
};//end onload()
reader.readAsText(filePath.files[0]);
}//end if html5 filelist support
else if(ActiveXObject && filePath) { //fallback to IE 6-8 support via ActiveX
try {
reader = new ActiveXObject("Scripting.FileSystemObject");
var file = reader.OpenTextFile(filePath, 1); //ActiveX File Object
output = file.ReadAll(); //text contents of file
file.Close(); //close file "input stream"
displayContents(output);
} catch (e) {
if (e.number == -2146827859) {
alert('Unable to access local files due to browser security settings. ' +
'To overcome this, go to Tools->Internet Options->Security->Custom Level. ' +
'Find the setting for "Initialize and script ActiveX controls not marked as safe" and change it to "Enable" or "Prompt"');
}
}
}
else { //this is where you could fallback to Java Applet, Flash or similar
return false;
}
return true;
}
/**
* display content using a basic HTML replacement
*/
function displayContents(txt) {
var el = document.getElementById('main');
el.innerHTML = txt; //display output in DOM
}
function myFunction() {
alert("We will start by highlighting all the required search terms then we will being our search by looking for the instances of the word 'pilot'")
var count = (txt.match(/program/g) || []).length
alert ("your word occured " + count + " times.")
}
</script>
</head>
<body onload="checkFileAPI();">
<div id="container">
<input type="file" onchange='readText(this)' />
<br/>
<hr/>
<h3>Contents of the Text file:</h3>
<div id="main">
...
</div>
</div>
</body>
</html>
更新
由于NinjaM和更多的研究,我想出了如何连接到加载到网站上的文档。我必须连接到ID并使用.innerHTML方法连接上传的文档。一切都很好,除了我现在有一个新的问题让我的循环正常工作。
我想让用户将文档上传到此网站,然后让他们点击一系列按钮来搜索文档中的关键字。我与一个正在编写气候变化文件的组织合作,我正试图加快这个过程。通常,一个人阅读文档然后使用 control-f 来搜索某些气候变化关键字。如果关键字在正确的上下文中位于文档中,则用户在我们的数据库中记下它。该网站将自动执行该流程,并降低人们不会搜索相应条款或不会搜索所有条款的风险。
我有一系列RegEx表达式,我想通过循环并在文档中搜索。我做了循环和表达式,但我希望我的循环在搜索数组中的每个项目后重新开始。例如,一旦它在文档中搜索关键词 pilot ,我就会希望它再次从头开始,并在整个文档中搜索关键字 project 。现在,搜索在文档中查找 pilot ,然后一旦找到 pilot 的最后一个实例,它就会转到 project 。这是我想帮助解决的代码部分:
function windowFind(){
var pilotWords = ["pilot","project"];
for (var i = 0; i < pilotWords.length; i++) {
("Find -> are = " + window.find(pilotWords[i]))}
}
您可以在github上查看该网站的基本版本https://calebdow.github.io/您必须找到上传测试文件
答案 0 :(得分:0)
文本文件的内容将显示在
中<div id="main">
...
</div>
或以纯文本格式运行打开html文件。至于在Javascript中使用文本,它将放在名为output
的变量中,该变量在代码中定义。