【问题标题】:Node js - Reading two CSV files synchronously?Node js - 同步读取两个CSV文件?
【发布时间】:2018-04-12 14:50:41
【问题描述】:

我在读取 CSV 文件时遇到了一点问题。让我退后一步。 (我使用的是节点js,需要('csv'))

所以我有两个 CSV 文件 --

  1. us-area-code-cities.csv - 每行或实体都包含美国区号和相应的纬度和经度值

    201,Bayonne,New Jersey,US,40.66871,-74.11431

  2. sampleData.csv - 包含通话的时间戳和来电者的电话号码

    07-JUN-95 11.28.15,1234567890

我有两个单独的 csv 对象,每个 CSV 文件一个(我不确定,如果这不常见,请告诉我):

var areaCodeCSV = csv(); 
var phoneDataCSV = csv();

首先,我需要使用 us-area-code-cities.csv 填充字典以将区号映射到纬度和经度对象。然后,当我遍历 sampleData.csv 中的每个 csv 实体时,我想将纬度和经度值查找为呼叫者的区号,并将区号转换为纬度/经度。但是,当我阅读 sampleData.csv 文件并尝试查找时,似乎还没有填充字典。

代码:

areaCodeCSV.from.path('./public/us-area-code-cities.csv').to.array(function (data) {
for (var index = 0; index < data.length; index++) {
    areaCodeDictionary[data[index][0]] = new geoLocation(data[index][4], data[index][5]);
}
console.log(areaCodeDictionary); //prints successfully
});


function convertAreaCodeToGeoObject(areaCode) {return areaCodeDictionary[areaCode]; }

phoneDataCSV.from.path('./public/sampleData.csv').to.array(function 
(data) {
for (var index = 0; index < data.length; index++) {
  var time = data[index][0];
  var ac = convertAreaCodeToGeoObject(data[index][1].substring(0, 3)); //only want the first three digits
  var year = parseInt("20" + time.substring(7, 9));
  var month = convertMonthToNum(time.substring(3, 6));
  var day = parseInt(time.substring(0, 2));
  var hours = parseInt(time.substring(10, 12));
  var minutes = parseInt(time.substring(13, 15));
  var seconds = parseInt(time.substring(16));

  console.log("ac:  " + ac); //prints undefined

  phoneData.push(new dataObject(new Date(year, month, day, hours, minutes, seconds, 0), ac));

  console.log(phoneData); //prints {date : undefined,...,date : undefined}

这些 CSV 文件是否必须同步读取?我猜一个是在另一个之前读取的,所以在我想将区号转换为纬度/经度时,字典并没有填充。我在这里缺少一个简单的解决方法吗?我想我可以做的一件事是对字典进行硬编码,但如果我能让它工作,那就太好了。看起来很简单!我试图将一个放入一个函数并在另一个中调用该函数,但 phoneData 数组只是空的。

谢谢!

【问题讨论】:

    标签: node.js csv


    【解决方案1】:

    需要在回调函数中插入seconf文件的进程:

    areaCodeCSV.from.path('./public/us-area-code-cities.csv').to.array(function (data) {
        let areaCodeDictionary = [];
        for (var index = 0; index < data.length; index++) {
            areaCodeDictionary[data[index][0]] = new geoLocation(data[index][4], data[index][5]);
        }
    
        proccesSecondFile(areaCodeDictionary);
        console.log(areaCodeDictionary); //prints successfully
    });
    
    function proccesSecondFile(areaCodeDictionary) {
        function convertAreaCodeToGeoObject(areaCode) { return areaCodeDictionary[areaCode]; }
    
        phoneDataCSV.from.path('./public/sampleData.csv').to.array(function(data) {
            for (var index = 0; index < data.length; index++) {
                var time = data[index][0];
                var ac = convertAreaCodeToGeoObject(data[index][1].substring(0, 3)); //only want the first three digits
                var year = parseInt("20" + time.substring(7, 9));
                var month = convertMonthToNum(time.substring(3, 6));
                var day = parseInt(time.substring(0, 2));
                var hours = parseInt(time.substring(10, 12));
                var minutes = parseInt(time.substring(13, 15));
                var seconds = parseInt(time.substring(16));
    
                console.log("ac:  " + ac); //prints undefined
    
                phoneData.push(new dataObject(new Date(year, month, day, hours, minutes, seconds, 0), ac));
            }
            console.log(phoneData); 
            //for websocket
            //var asString = JSON.stringify(phoneData);
            //console.log(asString);
        });
    }
    

    【讨论】:

    • 好的,我试过了。所以我现在有几个问题。当我在processSecondFile(areaCodeDictionary) 中打印 phoneData 时,它会多次打印出 phoneData 数组,而不是一次。当我在areaCodeToCSV 函数内打印phoneData 数组时,在回调函数proccesSecondFile(areaCodeDictionary) 下方,该数组为空。最后一个问题可能不是问题,但是当我连接到我的客户端(使用 websockets)并打印 phoneData 数组时,我看到 [object Object][object Object][object Object]... 而不是值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2018-07-12
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多