【问题标题】:Extracting specific Values from a text (txt) file using Java Script (JS)使用 Java 脚本 (JS) 从文本 (txt) 文件中提取特定值
【发布时间】:2021-03-02 12:27:12
【问题描述】:

我正在编写一个网页,您可以在其中上传文本文件,然后对文件进行一些分析。

文本文件的格式如下:

  • 0 1 475
  • 1 2 437
  • 2 3 553
  • 3 4 500
  • 4 5 612
  • 5 6 491
  • 6 7 444
  • 7 8 544
  • 8 9 491
  • 9 10 595

'*' 仅用于在堆栈溢出上创建列表,而不是实际在文本文件中

我只需要提取第三列(三位数字) 并将这些值放在一个变量中,以便以后用于分析。

我该怎么做?我似乎无法使用 javascript 找到答案。

谢谢

【问题讨论】:

  • 您有什么问题?访问文件的内容?处理文件内容?
  • @Titus 所以基本上我已经创建了一个拖放组件,现在当我上传文件时,我想像上面突出显示的那样处理它们。例如,文件上传后,在单击按钮时,它可以处理文件的值并将其存储到变量中,然后我可以使用这些值进行一些计算。所以我需要帮助的是处理。

标签: javascript html file txt


【解决方案1】:

您可以这样做,map 函数将每个字符串转换为整数:

const input = ["0 1 475",
               "1 2 437",
               "2 3 553",
               "3 4 500",
               "4 5 612",
               "5 6 491",
               "6 7 444",
               "7 8 544",
               "8 9 491",
               "9 10 595"];
const output = input.map((str) => parseInt(str.split(" ")[2]))
console.log(output);

【讨论】:

  • 感谢您的回答!但问题是每次上传新文件时文件值都会发生变化,因此具有恒定值将无法正常工作。有没有其他方法可以解决这个问题?
【解决方案2】:

你可以使用正则表达式:

   let str= `0 1 475
1 2 437
2 3 553
3 4 500
4 5 612
5 6 491
6 7 444
7 8 544
8 9 491
9 10 595`

let re=/\d{3}$/gm

console.log(str.match(re))

【讨论】:

    【解决方案3】:

    这是一种方法:

    document.querySelector('#fileInput').addEventListener('change', (e) => {
      readFile(e.target.files[0]);
    });
    
    function readFile(file) {
      const reader = new FileReader();
      reader.readAsText(file);
      reader.onload = function() {
        const values = reader.result.split('\n').map(line => (+line.split(' ')[2]));
        console.log(values);
      };
    }
    
    const fileContent = `0 1 475
    1 2 437
    2 3 553
    3 4 500
    4 5 612
    5 6 491
    6 7 444
    7 8 544
    8 9 491
    9 10 595`;
    
    const blob = new Blob([fileContent], {type: 'text/plain'});
    readFile(blob);
    <input id="fileInput" type="file" onchange="readFile(this.files[0])">

    在本例中,我使用Blob 模拟文件,但您也可以使用<input type="file" /> 使用真实文件测试功能。

    这样做是使用FileReader 将文件作为文本读取,然后通过创建一个数组来解析文件的内容,该数组将文件中的每一行文本作为一个元素 (reader.result.split('\n')),然后映射该数组以仅保留最后一个数字。这是通过在每个空白字符上拆分行并转换为数字并仅保留结果数组中的第三个元素来实现的(+line.split(' ')[2][2] 选择第三个元素,+ 将该元素转换为 @ 987654331@).

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      相关资源
      最近更新 更多