gpt4 book ai didi

javascript - 检查 D3 中潜在的 CSV 文件问题

转载 作者:行者123 更新时间:2023-11-29 11:03:40 24 4
gpt4 key购买 nike

我有一个 D3 项目,它使用一个非常大的 CSV 文件来读取数据。它工作正常,除了有时用户会因为以下问题之一而无限期地看到旋转的加载图像。
我需要能够捕捉到这些问题并向用户显示一些有意义的消息,而不是无休止的等待消息:

  1. 当数据文件(MyData.csv)不存在时
  2. 当 MyData.csv 存在但为空时
  3. 当 MyData.csv 存在时,不为空但格式不正确(更改第一行列标题的名称以进行测试)。

理想情况下,我希望能够区分它们。

function loadData() {
d3.csv('MyMap.csv', function(data) {
data.forEach(function(d) {
doSomething()
});

// load primary data set
d3.csv('MyData.csv', function (data) {
doSomethingWithData(data);
}); // main data set
});
};

更新了错误检查

var ErrorEnum = Object.freeze({NOTFOUND: 1, EMPTY: 2, INVALIDFORMAT: 3});
var mapFileName = 'MyMap_empty.csv';
var dataFileName = 'MyData_empty.csv';

function redirectOnFileError(fileName, url, errID) {
var errTitle = errID == ErrorEnum.NOTFOUND ? "File Not Found" : (errID == ErrorEnum.EMPTY ? "Empty File" : "Invalid File Format");
var errText = fileName + (errID == ErrorEnum.NOTFOUND ? " could not be found" : (errID == ErrorEnum.EMPTY ? " is empty" : " has invalid format"));
console.log(errText);

swal({
title: errTitle,
text: errText,
type: "error",
confirmButtonText: "OK"
},
function(isConfirm){
// somehow we never get here!
console.log("here ...");
if (isConfirm) {
window.location.href = url;
}
});
// hack ... callback function above is not executed, so using below jQuery to use "OK" button's class and 'click' it
$('.swal2-confirm').click(function(){
window.location.href = url;
});
}

function loadData() {
d3.csv(mapFileName, function (error, data) {
if (error && error.status === 404) {
redirectOnFileError(mapFileName, "fnf.html", ErrorEnum.NOTFOUND);
}
else if (data.length === 0) {
redirectOnFileError(mapFileName, "ef.html", ErrorEnum.EMPTY);
}
else {
data.forEach(function (d) {
// DoSomethingHere();
});

// load primary data set
d3.csv(dataFileName, function (error, data) {
if (error && error.status === 404) {
redirectOnFileError(dataFileName, "fnf.html", ErrorEnum.NOTFOUND);
}
else if (data.length === 0) {
redirectOnFileError(dataFileName, "ef.html", ErrorEnum.EMPTY); }
else {
// DomSomethingWithData();
}); // main data set
});
}
}
};

最佳答案

第一种和第二种情况都可以在这里回答(对于第三种情况,请参见下面的PS)。

在我们开始之前,让我们看看一个有效的现有 CSV 文件:

 d3.csv("https://gist.githubusercontent.com/GerardoFurtado/2e9f269f7a0f56cf7e23b480afcf280a/raw/5e361753a695534915e81786013976aa94685695/csvfile.csv", function(error, data) {
console.log(data)
});
<script src="https://d3js.org/d3.v4.min.js"></script>

如您所见,一切正常。这是我将在接下来的代码片段中使用的 CSV。

第一个场景

您的第一个场景...

When the data file (MyData.csv) doesn’t exist

...可以使用d3.csv函数中的第一个参数来处理,也就是错误(如果有的话):

d3.csv(url, function(error,data){...
//error here ----------^

在下面的代码片段中,我们正在检查错误中的 target.status。它会给你一个 404,它被打印在控制台上。我只是更改以前的 CSV 文件的 url:

d3.csv("https://gist.githubusercontent.com/GerardoFurtado/2e9f269f7a0f56cf7e23b480afcf280a/raw/fakeurl.csv", function(error, data) {
if (error && error.target.status === 404) {
console.log("File not found")
}
});
<script src="https://d3js.org/d3.v4.min.js"></script>

第二种情况

你的第二个场景......

When the MyData.csv exists but is empty

... 可以固定检查数据的长度。这是一个演示,使用我的第一个 CSV 的修改版本(没有行):

d3.csv("https://gist.githubusercontent.com/GerardoFurtado/2e9f269f7a0f56cf7e23b480afcf280a/raw/5e361753a695534915e81786013976aa94685695/csvfileempty.csv", function(error, data) {
if (error && error.target.status === 404) {
console.log("File not found")
}
if(data.length === 0){
console.log("File empty")
}
});
<script src="https://d3js.org/d3.v4.min.js"></script>

PS:您的第三种情况(“文件格式不正确”)只能由您解决:您是唯一知道文件结构的人。

关于javascript - 检查 D3 中潜在的 CSV 文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com