我有 CSV,其中包含我想要的 20 行数据、一些空白行,以及其他人正在根据他们关心的数据计算的其他内容。我正在使用 d3.csvParse,它会拾取额外的行。有没有办法告诉它在遇到空白行时停止,或者只能在后处理中处理?
data = d3.csvParse(await FileAttachment("Coverage Data.csv").text(), d3.autoType)
最佳答案
d3.csvParse
提供了传递 row
转换函数的功能(请参阅 dsv.Parse
),您可以使用它来检查和消除空白行。
您可以定义一个仍包含 d3.autoType
的 blankChecker
函数,并将该函数作为 row
参数传递。它可以用于输入中间或末尾的空白行。
请参阅下面的文字字符串作为输入:
const csv = `foo,bar,baz
0,"a",10
1,"b",20
2,"c",30
,,
4,"d",40
5,"e",50
,,
,,
8,"f",60
,,
,,
,,
,,`;
const blankChecker = (d, i) => {
const blankRow = Object.keys(d).every(k => !d[k]);
if (!blankRow) return d3.autoType(d);
console.log(`Row ${i} has all blank values`);
}
const data = d3.csvParse(csv, blankChecker);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.5.0/d3.min.js"></script>
如果您想在第一次出现空白行时停止解析,您可以定义一个类似的函数来执行此操作。在下面的示例中,如果不应返回更多行,则 blankQuitter
将 processing
标志设置为 false
:
const csv = `foo,bar,baz
0,"a",10
1,"b",20
2,"c",30
,,
4,"d",40
5,"e",50
,,
,,
8,"f",60
,,
,,
,,
,,`;
let processing = true;
const blankQuitter = (d, i) => {
const blankRow = Object.keys(d).every(k => !d[k]);
if (blankRow) processing = false;
if (processing) return d3.autoType(d);
}
const data = d3.csvParse(csv, blankQuitter);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.5.0/d3.min.js"></script>
关于javascript - 有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67793952/