【问题标题】:read a local file in javascript and output certain lines from it在 javascript 中读取本地文件并从中输出某些行
【发布时间】:2021-01-20 05:21:55
【问题描述】:

我的任务是处理一些我似乎无法解决的编码挑战。它的意思是用javascript完成,这是我多年来接触过的一种语言......基本上任务是读取一个本地文件,每行都有句子。一些句子是回文 - 目标是只输出回文句子。我曾尝试使用以下代码在 JSFiddle 中玩耍。但是,我的功能不起作用。

HTML:

<input type="file" name="file" id="file">

Javascript:

window.addEventListener('load', function() {
    document.getElementById("myBtn").addEventListener("click", function() {

      var reader = new FileReader();
      reader.addEventListener('load', function() {
        document.getElementById('file').innerText = this.result;
      });
      reader.readAsText(document.querySelector('input').files[0]);
    });
}, true);
console.log(reader);

我在网上找到了一些用于检查回文的代码,但它是针对用户输入的句子。我正在努力理解如何利用这个逻辑来应用到我输入的文件中的行。

function palindrome(str) {
var re = /[\W_]/g;
var lowRegStr = str.toLowerCase().replace(re, '');
var reverseStr = lowRegStr.split('').reverse().join(''); 
return reverseStr === lowRegStr;
}
palindrome("A man, a plan, a canal. Panama");

有什么想法或建议吗?谢谢!

【问题讨论】:

  • 程序的当前行为是什么?

标签: javascript filereader palindrome


【解决方案1】:

这是您获得的样板代码的快速解决方案: 示例文件内容:

A man, a plan, a canal. Panama
something else
another line

window.addEventListener('load', function() {
    document.getElementById("myBtn").addEventListener("click", function() {

      var reader = new FileReader();
      reader.addEventListener('load', function() {
        //document.getElementById('file').innerText = this.result;
        const strings = this.result.split(/\r?\n/);
        const palindromes = strings.filter((line) => {
          return palindrome(line);
        });
        console.log('initial lines:', strings);
        console.log('palindromes only:', palindromes);
      });
      reader.readAsText(document.querySelector('input').files[0]);
    });
}, true);
//console.log(reader);

function palindrome(str) {
  if (str === '') return false;
  var re = /[\W_]/g;
  var lowRegStr = str.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}
<input type="file" name="file" id="file">
<button id="myBtn">Start</button>

【讨论】:

  • 是的,这是因为换行符号与 Mac 和 PC 不同。将代码更新为用户正则表达式。现在试试。还添加了一个空字符串检查以说明文件中的空行。
  • 快速问题-您能解释一下const palindromes = strings.filter((line) =&gt; {return palindrome(line););reader.readAsText(document.querySelector('input').files[0]); 到底在做什么以及为什么它们是必要的吗?试图绕过它。谢谢!
  • 长话短说:reader.readAsText(); 读取选定的文件,并在完成读取 reader 对象时发出 load 事件。 load 事件监听函数获取文件内容为一个长字符串。然后侦听器函数将字符串按行分解为多个字符串的数组(使用换行符)。 Array 原型的filter 方法然后循环遍历每个项目并将其传递给palindrome 函数,该函数返回真或假。如果字符串数组中的true 项被添加到新的palindromes 数组中,如果false 则被删除。
  • 知道了!感谢您的精彩解释。 @farhodius
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多