Javascript 如何循环遍历文本文件中的一系列地址,并在Node.js中获取各个字段
我有一个文本文件,其中包含以下格式的多个地址: 335阿汉街Javascript 如何循环遍历文本文件中的一系列地址,并在Node.js中获取各个字段,javascript,node.js,Javascript,Node.js,我有一个文本文件,其中包含以下格式的多个地址: 335阿汉街 美国海恩斯市30721 786 Birchmount Dr. 乔治亚州滑铁卢52001 我如何在Node.js中循环这些行并获得街道编号、街道名称、城市、州、邮政编码等单个字段 const fs = require('fs'); const readline = require('readline'); const parseAddressFile = path => { const data = readline.cre
美国海恩斯市30721 786 Birchmount Dr.
乔治亚州滑铁卢52001 我如何在Node.js中循环这些行并获得街道编号、街道名称、城市、州、邮政编码等单个字段
const fs = require('fs');
const readline = require('readline');
const parseAddressFile = path => {
const data = readline.createInterface({
input: fs.createReadStream(path)
});
data.on('line', (line)=> {
var address1= line.split(" ")[0];
console.log(address1)
})
};
我正在使用readline模块,我基本上被困在这之后。您可以使用带有命名组的
正则表达式来尝试这样做,只要您有上述格式的地址
const fs=require('fs');
const readline=require('readline');
const parseAddressFile=path=>{
const data=readline.createInterface({
输入:fs.createReadStream(路径)
});
让地址={};
常量地址列表=[];
data.on('行',(行)=>{
如果(行){
常数temp=line.match(/^((?\d+)(.+)|(?。+),(?[A-Z]+)(?\d{5,5}))$/);
地址=对象键(临时组)。减少((acc,键)=>{
if(临时组[键]){
acc[键]=临时组[键];
}
返回acc;
},地址|{});
}否则{
地址列表。推送(地址);
地址=空;
}
}).on('关闭')功能(行){
如果(地址){
地址列表。推送(地址);
}
控制台日志(地址列表);
});
};
parseAddressFile('address.txt')
我喜欢将以下内容视为“蓝领”编码。它不会赢得任何奖项,但它确实做到了。它是这样写的,任何人只要看一眼就可以知道发生了什么。如前所述,它在前端工作,从“文件”字符串中提取地址。如果从注释掉的三行中删除正斜杠,并更改:
const address = parseAddressFile('file'); to
const address = parseAddressFile('addresses.txt');
或者,无论文本文件名是什么,您都可以在后端使用它
以下代码假定地址的格式正确
文件=
`主街123号。
不知道,明尼苏达州55414
第一街234号。
不在这里,SD 61743
147 Johnson Pkwy
加利福尼亚州洛杉矶90217
`;
const parseAddressFile=path=>{
//常数fs=要求('fs');
//const file=fs.readFileSync(path.toString('utf-8');
让address=[],tmp,obj,object={};
object=file.matchAll(//^.+$/mg);//删除空行
object=Array.from(对象);
for(让输入对象){
if(tmp=object[key][0]。匹配(/^(?\d+(.*)$/){
obj={streetNumber:tmp.groups.streetNumber,streetName:tmp.groups.streetName}
}否则
如果(tmp=object[key][0]。匹配(/^(?.*),(?\w.*)(?[\d\-]+)$/){
obj['city']=tmp.groups.city,
obj['state']=tmp.groups.state,
obj['postalCode']=tmp.groups.postalCode;
地址推送(obj);
obj=null;
}else{console.error('No Match Found')}
}回信地址;
}
//const address=parseAddressFile('addresses.txt');
const address=parseAddressFile(“文件”);
控制台日志(地址)代码>上面的代码非常好。但是如果streetName不是以“.”结尾,正则表达式就会失败。我可以通过更改:address=Object.keys(temp.groups)。reduce((acc,key)=>{到if(temp){address=Object.keys(temp.groups)。reduce((acc,key)=>{并从(?.+\)结尾删除“\”谢谢@VikingGlen,更新的代码片段。虽然我只是添加了一些匹配精确模式的代码,但它可能不是必需的。