Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析和搜索文本文件_Javascript_Jquery_Ajax_Parsing - Fatal编程技术网

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/)
。我跟随你,但我有县和州。我可以同时使用这两个作为针头还是做两次?我跟随你,但我有县和州。我可以同时使用这两个作为针头还是做两次?谢谢。:)尽管更快给出正确答案肯定是最好的答案。谢谢。:)虽然快速给出正确答案肯定是最好的答案。