【问题标题】:Is there an easy way to stop d3.csvParse when it hits a blank line?有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?
【发布时间】:2021-08-19 22:52:43
【问题描述】:

我的 CSV 包含我想要的 20 多行数据、一些空白行以及其他一些其他人正在计算他们关心的数据的内容。我正在使用 d3.csvParse,它会拾取额外的行。有没有办法告诉它在遇到空白行时停止,或者只能在后处理中处理?

data = d3.csvParse(await FileAttachment("Coverage Data.csv").text(), d3.autoType)

【问题讨论】:

    标签: javascript csv d3.js


    【解决方案1】:

    d3.csvParse 提供传递row 转换函数(请参阅dsv.Parse)的功能,您可以使用它来检查和消除空白行。

    您可以定义一个仍包含d3.autoTypeblankChecker 函数,并将该函数作为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>

    如果您想在第一次出现空白行时停止解析,您可以定义一个类似的函数来执行此操作。在下面的示例中,blankQuitterprocessing 标志设置为 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>

    【讨论】:

    • 谢谢。很高兴知道,但这会删除空白行,但不会停止对空白行的解析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多