解析和搜索文本文件

时间:2015-03-27 20:13:53

标签: javascript jquery ajax parsing

我拥有的是什么:县,州和县的列表file.txt中的代码,带有“,”作为分隔符:

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;

多数民众赞成在哪里迷路...我如何搜索这个文本文件并找到我知道县和州的代码?

3 个答案:

答案 0 :(得分:3)

使用循环。

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);

<强> jsFiddle

要让代码像这样测试:

if (item.state == state && item.county == county)
    return item.code;

答案 1 :(得分:2)

如果您的列表很长并且您将进行多次查找,则可以使用字典来提高时间效率:在字典中,每个查找都具有时间复杂度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()函数生成的数组。

, - 只是一个逗号字符

答案 2 :(得分:1)

您可以使用此功能将CSV(逗号分隔值)转换为JSON HERE

//var csv is the CSV file with headers
function csvJSON(csv){

  var lines=csv.split("\n");     
  var result = [];     
  var headers=lines[0].split(",");

  for(var i=1;i<lines.length;i++){     
      var obj = {};
      var currentline=lines[i].split(",");

      for(var j=0;j<headers.length;j++){
          obj[headers[j]] = currentline[j];
      }

      result.push(obj);     
  }

  //return result; //JavaScript object
  return JSON.stringify(result); //JSON
}

那么,找到类似的东西:

// the code you're looking for
var needleCode = 001005;
var needleCounty = 'Barbour';

// iterate over each element in the array
for (var i = 0; i < obj.length i++){
  // look for the entry with a matching `code` value
  if (obj[i][0] === needleCode && obj[i][1] === needleCounty){
     // we found it
    // obj[i][1] is the matched county
    // obj[i][2] is the matched county code 
  }
}