我尝试在TypeScript / nodejs中读取一个相当大的文本文件。这是我目前的做法:
new Promise((resolve, reject) => {
const stream = createReadStream(`${folder}/${file}`)
stream.on('error', function(error) {
const msg = `error: ${error.message}`
console.log(msg)
reject(msg)
})
stream.on('data', chunk => {
//write to coordinates
chunk
.toString()
.split('\n')
.map((line: string) => line.split(/[,\s;]+/)) // Accept " ", "," and ";" as delimiter
.map((line: string[]) => {
const point = [+line[0], +line[1], +line[2]]
// console.log(point, bbox, bboxSize)
if (isInsideBoundingBox(point, bbox, bboxSize)) {
coordinatesList.push({
x: point[0],
y: point[1],
z: point[2],
})
}
})
})
stream.on('close', () => {
resolve('')
})
})
确实管用。我正在阅读的文件大约有40.000行,由这样的行组成:
401438.00 5650223.00 344.68
401439.00 5650223.00 344.78
401440.00 5650223.00 344.87
401441.00 5650223.00 344.93
401442.00 5650223.00 345.00
401443.00 5650223.00 345.08
我现在要做的是把所有的坐标解析成一个{x:number,y:nunmber,z:number}[]
数组
但有时它不能正确识别值并返回“null”。我就是不知道为什么。我正在阅读的文本文件非常好。例如,有时在这行中,它返回x:null > 401440.00 5650223.00 344.87,应是344.87。
我唯一能想到的是我对组块的使用有些不可靠。所以我在想它不够大,又做了一个块,忘记了读到的文本文件的一些片段?我真的不知道该如何解决这个问题。
任何想法,我将如何找到错误将是可怕的!
非常感谢!
1条答案
按热度按时间9jyewag01#
您的算法假设
data
事件侦听器接收的每个块都由完整的行组成,但实际情况并非如此。您可以使用readline.createInterface
将流拆分为行: