如何使用 Javascript 解析 .frd 文件?

How can I parse a .frd file with Javascript?

.frd 文件是一种多列数字数据table,用于存储有关扬声器频率响应的信息。在文本编辑器中打开时,.frd 文件看起来像这样:

2210.4492       89.1    -157.7
2216.3086       88.99   -157.7
2222.168        88.88   -157.6
2228.0273       88.77   -157.4

使用 javascript,有没有一种方法可以解析这些数据,以便 return 分别对每一列进行分析?

例如,从上面的 .frd 文件中,我需要 return 像这样的值:

var column1 = [2210.4492, 2216.3086, 2222.168, 2228.0273];

var column2 = [89.1, 88.99, 88.88, 88.77];

var column3 = [-157.7, -157.7, -157.6, -157.4];

我不太确定从哪里开始尝试实现这一目标,因此朝正确方向迈出的任何一步都会有所帮助!

我找到了下面description的FRD文件格式,我就照着做。

假设您的 .frd 文件的内容位于名为 content 的变量中(以下示例适用于 Node.js):

const fs = require('fs');
const content = fs.readFileSync('./input.frd').toString();

现在如果content有你的FRD数据,这意味着它是一组线,每线恰好包含三个数字:频率(Hz)、电平(dB)和相位(度) .要将你的 content 分成几行,我们可以直接 split 它:

const lines = content.split(/\r?\n/);

(通常情况下,仅按 '\n' 拆分会有效,但我们明确支持 Windows-style 换行符 \r\n 以防万一。/\r?\n/ 是常规表示 "maybe \r, then \n")

的表达式

要将每一行解析为三个数字,我们可以这样做:

const values = line.split(/\s+/);

如果文件可以包含空行,仔细检查该行是否恰好包含三个值可能是有意义的:

if (values.length !== 3) {
  // skip this line
}

鉴于我们在values中有三个值,作为字符串,我们可以分配相应的变量:

const [frequency, level, phase] = values.map(value => Number(value));

.mapvalues 中的所有值从字符串转换为 Number - 让我们这样做以确保我们存储了正确的类型)。

现在将所有这些部分放在一起:

const fs = require('fs');
const content = fs.readFileSync('./input.frd').toString();

const frequencies = [];
const levels = [];
const phases = [];

const lines = content.split(/\r?\n/);
for (const line of lines) {
  const values = line.split(/\s+/);
  if (values.length !== 3) {
    continue;
  }
  const [frequency, level, phase] = values.map(value => Number(value));
  frequencies.push(frequency);
  levels.push(level);
  phases.push(phase);
}

console.log(frequencies);
console.log(levels);
console.log(phases);

主要代码(与 content 一起使用的代码)也可以在浏览器中使用,而不仅仅是 Node.js,如果您需要的话。

这段代码可以用很多不同的方式编写,但我试图让它更容易解释,所以做了一些非常简单的事情。

要在 Node.js 中使用它(如果您的 JavaScript 文件名为 index.js):

$ cat input.frd 
2210.4492       89.1    -157.7
2216.3086       88.99   -157.7
2222.168        88.88   -157.6
2228.0273       88.77   -157.4

$ node index.js 
[ 2210.4492, 2216.3086, 2222.168, 2228.0273 ]
[ 89.1, 88.99, 88.88, 88.77 ]
[ -157.7, -157.7, -157.6, -157.4 ]