2022.5.20 更新
今天来上工了,这次用readFile,writeFile函数读数据,存为二维矩阵形式。
数据格式大概长这样:
ALFA Cnor Cm CY Cn Cl M= 0.30 H=00000 DLTE=-30.0 全量、基本量、舵偏增量
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.111111 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.111111 0.000000 0.000000
...
ALFA Cnor Cm CY Cn Cl M= 0.30 H=00000 DLTE=-20.0 全量、基本量、舵偏增量
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.111111 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.111111 0.000000 0.000000
...
需要分别将某列的数据取出,以行储存,遇到不同DLTE需要换行,实现代码:
const fs = require("fs");
/*异步读取*==================================*/
const Cnor = [];
fs.readFile("readDLTE.txt", (err, data) => {
if (err) {
return console.error(err);
}
//按照换行符分割,得到字符串数组myArray,每个元素表示原来文件中的一行
const myArray = data.toString().split("\n");
myArray.forEach(el => {
if(el[1]!=='A'){//除去带说明文字的行,只存入数值
let line = el.split(/\s+/);//去掉所有空格
Cnor.push(line[12]);//提取需要的字符
if((Cnor.length+1)%9 === 0) Cnor.push('\n')//添加换行符
}
});
console.log("程序执行完毕。");
fs.writeFile('Cnor.txt',Cnor.toString(),err=>{
console.log('Cnor写入成功')
})
});
注意这里得到的line数组首尾总会有两个“”空字符占位(一行)
明天华为机试,准备一下算法题输入输出写法。
readline函数
readLine()是读取流数据的时候用的,当读到换行标记'\n'、'\r'(回车)时,会跟着换行,同时会以字符串形式返回这一行的数据,当读取完所有的数据时会返回null
数组和字符串互相转化
String.split
split(' '):按一个空格拆分字符串
split(' '):
split(/\s+/): /直接,返回一个数组
Array.join(','/' '/'')
用逗号/空格/直接连接数组,返回一个字符串
rl.on()
rl.on('line',(line)=>{})相当于开启读行的监听,读完一行执行回调。
rl.on('close',()=>{})结束读取的回调。可以在这里处理全局变量
rl.close()
停止读取
示例1 单行输入 单行输出
输入:a,b
2 3
输出:a+b
5
const readline = require('readline');
//实例化
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
//开启事件监听
rl.on('line', function (line) {
//只有一行,以 空格 分隔,存入tokens数组中
const tokens = line.split(' ');
console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});
示例2 多行输入 单行输出
输入:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。
ABCabc
A
输出:输入字符串中含有该字符的个数。(不区分大小写字母)
2
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const arr = [];
rl.on('line', function (line) {
arr.push(line);
if (arr.length === 2) {
rl.close();
}
})
rl.on('close', function() {
const matches = arr[0].match(new RegExp(arr[1], 'ig'));
const len = matches === null ? 0 : matches.length;
console.log(len);
});
示例3 多行输入 多行输出
生成了N个1~500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
数据范围: 1≤n≤1000 ,输入的数字大小满足 1≤val≤500
输入:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之间的随机整数
3
2
2
1
输出:多行,表示输入数据处理后的结果
1
2
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let N = 0;
const myArray = [];//储存数据
rl.on('line', function (line) {
if (N === 0) {//第一行
N = parseInt(line);
} else{//数据
myArray.push(parseInt(line));
}
});
rl.on('close',function (){
let myArrayWithNoDuplicates = myArray.reduce(function (
previousValue,
currentValue
) {
if (previousValue.indexOf(currentValue) === -1) {
previousValue.push(currentValue);
}
return previousValue;
},[]);
myArrayWithNoDuplicates.sort((a, b) => a - b);
for(let i = 0;i < myArrayWithNoDuplicates.length;i++){
console.log(myArrayWithNoDuplicates[i])
}
})