使用文本文件而不是数组

Using a text file instead of an array?

本文关键字:数组 文件 文本      更新时间:2023-09-26

我对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很陌生,所以任何帮助都会很棒!

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

我能想到的最简单的方法就是在加载到浏览器中后解析文本或 csv 文件,这似乎是:

(1)对文本文件发出AJAX请求,对于Javascript新手来说,最简单的方法可能是jQuery.get()

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

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

然后lines将是一个数组,您可以在示例中根据需要进行处理。

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

我为您制作了一个示例代码。请看一下 http://plnkr.co/edit/6gC7TopyhZ7cEZLxXFx3?p=preview。请尝试"运行",然后单击右侧视图上的"CSV到阵列"按钮以查看其工作原理。这些代码的要点是:

  1. 使用 ajax 加载名为 post_code.csv 的 CSV 文件的字符串 $.get() (jQuery 函数)。我使用简单的逗号(',')分隔符制作的CSV文件示例,因为我认为它将保存以分隔每个邮政编码数据。您可以在左侧边栏上找到post_code.csv文件示例。
  2. 使用我的简单 CSV 字符串解析器
  3. 解析 CSV 文件的字符串
  4. ,在那里称为 bexplode(),通过使用 var csv_to_array=bexplode(data, ',') .

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