2016-03-16 18 views
1

我很新的Javascript,我想知道是否可以使用上传的.txt文件或.csv文件来替换下面的数组;使用文本文件而不是数组?

我想使用.txt的原因。或.csv文件是因为我每天都会收到数百个邮政编码,并更新邮政编码或删除邮政编码(如果它们超过90天)。我宁愿不每天编辑数组。

if (isInArray(pcode, [2000, 2001, 2100, 2010, 3100, 3131, 3123, 3333, 3215, 4100, 4321, 4567, 4865, 5000]) !== -1) { 
    pcheck = "Delivered"; 
} else { 
    pcheck = "Not delivered"; 
} 

这是整个代码:

<!DOCTYPE html> 
<html> 
<body> 

Enter the Post Code: 

<input id="code" value="" /> 

<button onclick="validate()">Submit</button> 

<p id="result"></p> 
<p id="state"></p> 

<script> 
function isInArray(value,array) { 
return array.indexOf(value) > -1; 
} 

function validate() { 
var pcode, pcheck, pstate; 
pcode = Number(document.getElementById("code").value); 
if (isNaN(pcode)) { 
    pcheck = "This is not a post code."; 
    pstate = "No state."; 
} 

if (isInArray(pcode, [2000, 2001, 2100, 2010, 3100, 3131, 3123, 3333, 3215, 4100, 4321, 4567, 4865, 5000]) !== -1) { 
    pcheck = "Delivered"; 
} else { 
    pcheck = "Not delivered"; 
} 

if (((pcode >= 2000) && (pcode <= 2599))||((pcode >= 2619) && (pcode <= 2899))||((pcode >= 2921) && (pcode <= 2999))) { 
    pstate = "NSW"; 
} else if ((pcode >= 1000) && (pcode <= 1999)) { 
    pstate = "NSW LVR/PO Box"; 
} else if (((pcode >= 2600) && (pcode <= 2618))||((pcode >= 2900) && (pcode <= 2920))) { 
    pstate = "ACT"; 
} else if ((pcode >= 200) && (pcode <= 299)) { 
    pstate = "ACT LVR/PO Box"; 
} else if ((pcode >= 3000) && (pcode <= 3999)) { 
    pstate = "VIC"; 
} else if ((pcode >= 8000) && (pcode <= 8999)) { 
    pstate = "VIC LVR/PO Box"; 
} else if ((pcode >= 4000) && (pcode <= 4999)) { 
    pstate = "QLD"; 
} else if ((pcode >= 9000) && (pcode <= 9999)) { 
    pstate = "QLD LVR/PO Box"; 
} else if ((pcode >= 5000) && (pcode <= 5799)) { 
    pstate = "SA"; 
} else if ((pcode >= 5800) && (pcode <= 5999)) { 
    pstate = "SA LVR/PO Box"; 
} else if ((pcode >= 6000) && (pcode <= 6797)) { 
    pstate = "WA"; 
} else if ((pcode >= 6800) && (pcode <= 6999)) { 
    pstate = "WA LVR/PO Box"; 
} else if ((pcode >= 7000) && (pcode <= 7799)) { 
    pstate = "TAS"; 
} else if ((pcode >= 7800) && (pcode <= 7999)) { 
    pstate = "TAS LVR/PO Box"; 
} else if ((pcode >= 800) && (pcode <= 899)) { 
    pstate = "NT"; 
} else if ((pcode >= 900) && (pcode <= 999)) { 
    pstate = "NT LVR/PO Box"; 
} else { 
    pcheck = "This is not a post code."; 
    pstate = "No state."; 
} 

document.getElementById("result").innerHTML = pcheck; 
document.getElementById("state").innerHTML = pstate; 
} 
</script> 

</body> 
</html> 

如何精简这个任何建议将是巨大的。再一次,我对JS很新,所以任何帮助都会很棒!

+0

为什么?使用数组有什么问题? –

+0

耶看看FileReader和一个CSV解析器。也可能是一个一站式的工具。 – dandavis

+1

您是否使用任何类型的服务器端呈现工具?请记住,JavaScript运行在客户机上,因此它不能访问服务器上的文件系统。 –

回答

0

如果你涉及服务器,那么你有很多选择。

我能想到的完成你的要求到底是什么,它似乎是只解析一次加载到浏览器文本或CSV文件,最简单的方法,就是:

(1)请一个AJAX请求的文本文件,最简单的方式做到这一点,有人新的JavaScript,可能是jQuery.get()

(2).txt文件将只是一个字符串,那么你可以这样做:

var lines = file.split('\n'); 

lines然后将是一个数组,您可以按照您的示例进行处理。

0

如果您使用的是CSV文件。然后,您可以在CSV文件上使用ajax加载字符串后为其创建解析器函数,例如:$.get('post_code.csv',function(data){ var csv_to_array=parserFunction(data);})

我为你做了一个示例代码。请看http://plnkr.co/edit/6gC7TopyhZ7cEZLxXFx3?p=preview。请尝试“运行”,然后点击右侧视图中的“CSV到数组”按钮,看看它是如何工作的。这些代码的一点是:

  1. CSV文件加载字符串使用$.get()(jQuery的功能)与阿贾克斯命名post_code.csv。我使用一个简单的逗号(',')分隔符来创建CSV文件的例子,因为我认为它将保存以分隔每个邮政编码数据。你可以在左边栏找到post_code.csv文件的例子。
  2. 使用var csv_to_array=bexplode(data, ','),通过我简单的CSV字符串解析器bexplode()解析CSV文件的字符串。

对于更复杂的CSV格式,我建议您使用更多高级CSV解析器,如http://papaparse.com/。但对于你的情况,我认为我的功能会很好。

相关问题