Javascript 解析和搜索文本文件
我所拥有的:文件中的县、州和代码列表,以“,”作为分隔符:Javascript 解析和搜索文本文件,javascript,jquery,ajax,parsing,Javascript,Jquery,Ajax,Parsing,我所拥有的:文件中的县、州和代码列表,以“,”作为分隔符: 001001,Autauga, AL 001003,Baldwin, AL 001005,Barbour, AL 001007,Bibb, AL 001009,Blount, AL 001011,Bullock, AL 001013,Butler, AL 我想做什么: 搜索一个特定的代码给定我的县和州 想法: 使用ajax加载整个文件并对其进行解析: $.ajax({ url : CountyAndStateURL,
001001,Autauga, AL
001003,Baldwin, AL
001005,Barbour, AL
001007,Bibb, AL
001009,Blount, AL
001011,Bullock, AL
001013,Butler, AL
我想做什么:
搜索一个特定的代码给定我的县和州
想法:
使用ajax加载整个文件并对其进行解析:
$.ajax({
url : CountyAndStateURL,
type : 'GET',
dataType : 'txt',
crossDomain : true,
success: function(data) {
pageExecute.fileContents = data;
这就是我迷路的地方…如果我知道县和州,我如何搜索这个文本文件并找到代码?使用循环
var result = [];
var rows = text.split('\n');
for (var r = 0; r < rows.length; r++) {
var items = rows[r].split(',');
var item = {};
item.code = items[0];
item.name = items[1];
result.push(item);
}
console.log(result);
使用循环
var result = [];
var rows = text.split('\n');
for (var r = 0; r < rows.length; r++) {
var items = rows[r].split(',');
var item = {};
item.code = items[0];
item.name = items[1];
result.push(item);
}
console.log(result);
您可以使用此函数将CSV(逗号分隔值)从转换为JSON
//var csv是带有标题的csv文件
函数csvJSON(csv){
变量行=csv.split(“\n”);
var结果=[];
var headers=行[0]。拆分(“”,“”);
对于(var i=1;i,您可以使用以下函数将CSV(逗号分隔值)转换为JSON
//var csv是带有标题的csv文件
函数csvJSON(csv){
变量行=csv.split(“\n”);
var结果=[];
var headers=行[0]。拆分(“”,“”);
对于(var i=1;i如果您的列表很长,并且要执行许多查找,则可以使用字典来提高时间效率:在字典中,每个查找都有时间复杂性O(log(n)),这比O(n)解决方案要好一点
我提议的解决办法:
var text =
"001001,Autauga, AL\n" +
"001003,Baldwin, AL\n" +
"001005,Barbour, AL\n" +
"001007,Bibb, AL\n" +
"001009,Blount, AL\n" +
"001011,Bullock, AL\n" +
"001013,Butler, AL\n";
// Split the text in lines
// (Trim it first to get rid of any newline character at the end)
var lines = text.trim().split("\n");
// Regular expression for line's content
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
var dict = { };
lines.forEach(function(lineStr) {
var matchResult = lineStr.match(regex);
var key = {
county: matchResult[2],
state : matchResult[3]
};
var code = matchResult[1];
dict[key] = code;
});
// Lookup in dict:
console.log(dict[{ county: "Bibb", state: "AL" }]);
编辑:我的正则表达式如何工作?
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
\s
-任何空白字符
\s*
-0个或更多空白字符
-除新行以外的任何字符
+
-一个或多个字符(新行除外)
()
-捕获组:与括号内的规则匹配的内容将写入作为String.match()函数结果的数组
,
-只要一个逗号字符如果您的列表很长,并且要进行许多查找,您可以使用字典来提高时间效率:在字典中,每次查找都有一个时间复杂度O(log(n)),这比O(n)解决方案要好一点
我提议的解决办法:
var text =
"001001,Autauga, AL\n" +
"001003,Baldwin, AL\n" +
"001005,Barbour, AL\n" +
"001007,Bibb, AL\n" +
"001009,Blount, AL\n" +
"001011,Bullock, AL\n" +
"001013,Butler, AL\n";
// Split the text in lines
// (Trim it first to get rid of any newline character at the end)
var lines = text.trim().split("\n");
// Regular expression for line's content
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
var dict = { };
lines.forEach(function(lineStr) {
var matchResult = lineStr.match(regex);
var key = {
county: matchResult[2],
state : matchResult[3]
};
var code = matchResult[1];
dict[key] = code;
});
// Lookup in dict:
console.log(dict[{ county: "Bibb", state: "AL" }]);
编辑:我的正则表达式如何工作?
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
\s
-任何空白字符
\s*
-0个或更多空白字符
-除新行以外的任何字符
+
-一个或多个字符(新行除外)
()
-捕获组:与括号内的规则匹配的内容将写入作为String.match()函数结果的数组
,
-只需一个逗号字符您可以使用RegExp查找行而不拆分,或者将文本拆分为行,可能拆分为列,并过滤行,直到找到所需的行。您可以使用RegExp查找行而不拆分,或者将文本拆分为行,可能拆分为列,并过滤行,直到找到所需的行他是你需要的。添加一个简单的if语句,并将每个语句与我所在的县和州进行比较……我猜?这将在处理保存在Windows应用程序上的txt文件时产生意外结果(它会打断Windows的新行字符\r\n
)。@JoshCox是的,你可以这样做。@Teemu你可以编写文本。替换(/\r\n/g,“\n”).split('\n'))
…或只是rows=text.split(/\r\n |\n/)
。添加一个简单的if语句,并将每个语句与我所在的县和州进行比较…我猜?这将在处理保存在Windows应用程序上的txt文件时产生意外的结果(它会打断Windows的新行字符\r\n
)@JoshCox是的,你可以这样做。@Teemu你可以写text.replace(/\r\n/g,“\n”).split('\n');
…或者只写rows=text.split(/\r\n |\n/)
。我跟随你,但我有县和州。我可以同时使用这两个作为针头还是做两次?我跟随你,但我有县和州。我可以同时使用这两个作为针头还是做两次?谢谢。:)尽管更快给出正确答案肯定是最好的答案。谢谢。:)虽然快速给出正确答案肯定是最好的答案。