javascript - 在 JavaScript (Node.js) 中读取数字?

标签 javascript arrays node.js string data-structures

我有一个文本文件,其中有数字字符 -

   _  _  _  _  _  _  _  _  _  (line 1)
    | _| _||_||_ |_   ||_||_| (line 2)
    ||_  _|  | _||_|  ||_| _| (line 3)
                              (line 4)
      _  _  _  _  _  _     _  (line 5)
  |_||_|| ||_||_   |  |  ||_  (line 6)
    | _||_||_||_|  |  |  | _| (line 7)
                              (line 8)

发票号码格式:

每个发票编号由 9 位数字组成 [0..9]
发票编号使用 _ 和 | 书写字符。
发票号输入需要4行。
前 3 行包含 27 个字符。
第四行是空白。

输出应该是-
723956789
490867715

我像这样使用 Node js 的 fs 模块读取文本文件,并将每个数字字符基本上分成三部分 -

var fun = function(){
fs.readFile("./input1.txt", 'utf8', function(err, data) {
    var i = 0;
    console.log(data.length);
    while(data[i] != "\n" && i<data.length) {
        if(data[i] != " ") {
            var str = "";
            while(data[i]!= " " && data[i]!= "\n") {
                str = str + data[i];
                i++;
            }
            inputA.push(str);
            } else {
            i++;
        }
    }
    i++;
    console.log(i,inputA);

    while(data[i] != "\n" && i<data.length) {
        if(data[i] != " ") {
            var str = "";
            while(data[i]!= " " && data[i]!= "\n") {
                str = str + data[i];
                i++;
            }
            inputB.push(str);
            // console.log(inputA);
        } else {
            i++;
        }
    }
    i++;
    console.log(i,inputB);

    while(data[i] != "\n" && i<data.length) {
        if(data[i] != " ") {
            var str = "";
            while(data[i]!= " " && data[i]!= "\n") {
                str = str + data[i];
                i++;
            }
            console.log(str);
            inputC.push(str);
            // console.log(inputA);
        } else {
            i++;
        }
    } 
    console.log(inputA);
    console.log(inputB);
    console.log(inputC);
})

但无法正常阅读。任何人都可以帮助我阅读并获得所需的输出。

最佳答案

ES6 中有两个函数可以完成这项工作:

function getDigit(pattern) {
    return {
        " _ | ||_|": 0,
        "     |  |": 1,
        " _  _||_ ": 2,
        " _  _| _|": 3,
        "   |_|  |": 4,
        " _ |_  _|": 5,
        " _ |_ |_|": 6,
        " _   |  |": 7,
        " _ |_||_|": 8,
        " _ |_|  |": 9,
        " _ |_| _|": 9, // alternative 9
    }[pattern];
}

function getNumber(lines) {
    // Chop each line into 9 pieces of 3 chars:
    lines = lines.map( line => line.match(/.../g) );
    // Combine the pieces of each digit-pattern together:
    return +lines[0].map ( (piece, i) => piece + lines[1][i] + lines[2][i] )
        // Translate each pattern of 3x3=9 characters to a digit
        .map(getDigit)
        // Join digits together into one number
        .join('');
}

// Sample data
const data = 
       ' _  _  _  _  _  _  _  _  _ \n'
     + '  | _| _||_||_ |_   ||_||_|\n'
     + '  ||_  _|  | _||_|  ||_| _|\n'
     + '\n'
     + '    _  _  _  _  _  _     _ \n'
     + '|_||_|| ||_||_   |  |  ||_ \n'
     + '  | _||_||_||_|  |  |  | _|';

const lines = data.split('\n');

var a = getNumber(lines.slice(0, 3));
var b = getNumber(lines.slice(4));

console.log(a);
console.log(b);

关于javascript - 在 JavaScript (Node.js) 中读取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43054107/

相关文章:

javascript - 如何将列表框的值存储到数组中,然后使用它将其数据显示到另一个页面 php

javascript - 不和谐机器人自定义命令JS

javascript - 迭代列表元素 - jQuery

javascript - 有没有办法定位屏幕上的按钮?

javascript - 如何通过输入id获取formData文件

arrays - 访问批处理文件中常量索引处的数组元素

javascript - 如何确定从选择字段中选择了哪个选项

arrays - Bash 数组分组元素

node.js - 可以使用 apache 在 nodejs 服务器之间进行负载平衡

javascript - 在我的应用程序中声明和链接 Controller 时遇到问题