【发布时间】:2018-04-12 14:50:41
【问题描述】:
我在读取 CSV 文件时遇到了一点问题。让我退后一步。 (我使用的是节点js,需要('csv'))
所以我有两个 CSV 文件 --
-
us-area-code-cities.csv - 每行或实体都包含美国区号和相应的纬度和经度值
201,Bayonne,New Jersey,US,40.66871,-74.11431
-
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 数组只是空的。
谢谢!
【问题讨论】: