循环遍历打字稿中的文本文件

Sam*_*ben 0 javascript typescript typescript-typings typescript2.0

我已阅读本地文件 flight.txt

1 DFW BOM 2016-05-20 12:20 2016-05-21 02:40 1084.00 JetAirways 100
2 DFW DEL 2016-04-24 17:15 2016-04-25 07:20 1234.00 Lufthansa 100
3 DFW FRA 2016-06-05 13:30 2016-06-05 03:32 674.00 AmericanAirlines 100
Run Code Online (Sandbox Code Playgroud)

用于在打字稿中读取文件的代码。

 populateFlightList() {
   let data = fs.readFileSync('flight.txt').toString('utf-8'); {
        let textByLine = data.split("\n")
        console.log(textByLine);

    };
Run Code Online (Sandbox Code Playgroud)

现在我想循环并从文件中读取数据,并通过在每次迭代中创建一个新对象并将其添加到数组列表中来将数据解析为飞行对象。

   try {
        Scanner fin = new Scanner(file);                
        while(fin.hasNext()) {
          int number = fin.nextInt();                 //flight numer
          String from = fin.next();                   //Departure airport
          String to = fin.next(); //Arrival airport
    }**Code in Java**
Run Code Online (Sandbox Code Playgroud)

我如何在打字稿中做到这一点?

Tit*_*mir 5

您可以使用该readline模块一次读取一行。解析数据仍将是手动操作:

import * as fs from 'fs';
import * as rd from 'readline'

var reader = rd.createInterface(fs.createReadStream("W:\\tmp\\stack\\2\\data.txt"))

var data: Array<{ number: number; from: string; to: string}> = [];
reader.on("line", (l: string) => {
    var tokens = l.split(' ');
    var nr= parseInt(tokens[0]);
    var from = tokens[1];
    var to = tokens[2]
    console.log(`nr: ${nr} from ${from} to ${to}`);
    data.push({
        number: nr, from, to
    });
})
console.log(`Will be empty data has not yet been read ${data.length}` );

reader.on("close", ()=> {
    console.log(`Data has been read ${data.length}` );
    data.forEach(element => {
        console.log(`nr: ${element.number} from ${element.from} to ${element.to}`)
    });
})
Run Code Online (Sandbox Code Playgroud)

line事件将针对每一行触发一次。该close事件将在读取整个文件并关闭文件后触发,这是整个数据集可用的地方,每次line事件发生时,我们一次建立一个条目。

有关 readline 模块的更多信息,请参阅文档