javascript - CSV 格式破坏了我替换客户数据的算法

标签 javascript arrays csv formatting

我正在尝试创建一个脚本,用随机选择的名称替换客户数据(例如公司名称)。我的问题是 CSV 文件(第 3 行)在列数据内有一个中断

(“登录:#BREAK# #BREAK# 用户名 #BREAK# 电子邮件 #BREAK# 密码:************”)。

我的示例 CSV 文件看起来像这样(我已缩写它并替换了客户数据):

"607";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"686";"companyName";"street";"PLZ";"CITY";"";"0";"";"1";"N";"F";"customer";"0";"4";"7";"1";"z";"d";"d";"d";"d";"d";"0";"Y";"0";"75";"0";"0"
"608";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"687";"companyName";"street";"PLZ";"CITY";"";"0";"";"1";"N";F";"customer";"0";"5";"12";"1";"z";"Y";"d";"d";"d";"d";"0";"Y";"0";"75";"0";"0"
"609";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"688";"companyName";"Street";"PLZ";"City";"";"0";"Login:

USERNAME
EMAIL
Passwort: *******************";"0";"N";"";"";"0";"299";"170";"0";"k";"Y";"d";"d";"d";"d";"0";"";"0";"0";"0";"0"
"610";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"689";"companyName";"Street";"PLZ";"City";"";"0";"";"0";"N";"";"customer";"0";"9";"12";"0";"k";"d";"d";"d";"d";"d";"0";"";"0";"0";"0";"0"
"611";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"690";"companyName";"Street";"PLZ";"City";"";"0";"";"0";"N";"";"customer";"0";"24";"21";"0";"k";"Y";"d";"d";"d";"d";"0";"";"0";"0";"0";"0" '

在我的脚本中,我写道,每次中断之后,数组都会获取上次中断之后和下一次中断之前的所有内容的值。

为了更好地理解:第一次循环后数组看起来像这样:

"607";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"686";"companyName";"Street";"PLZ";"City";"";"0";"";"1";"N";"";"customer";"0";"4";"7";"1";"z";"d";"d";"d";"d";"d";"0";"Y";"0";"75";"0";"0""

数组的大小为 31。但是当执行 CSV 文件的 ID“609”时,我会得到(当然)这样的结果:

"609";"2017-07-10 16:28:32";"2017-07-10 16:28:32";"688";"companyName";"Street";"PLZ";"City";"";"0";"Login:

所以我的整个算法失败了。

这是我的上传功能:

function Upload() {
        var vorname = [];  // actually 1000 first names
        var nachname = []; // acutally 1000 surnames
        var cells;
        var strWholeFile = "";
        var lineToReplace = 4;
        var counter;
        var fileUpload = document.getElementById("fileUpload");
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
        if (regex.test(fileUpload.value.toLowerCase())) {
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();

                /* Reader.onload function */
                reader.onload = function (e) {
                    var rows = e.target.result.split("\n");
                    rows.length = rows.length - 1;
                    console.log(strWholeFile);

                    /** For every "return" the loop will 
                     *  be executed once **/
                    for (var i = 0; i < rows.length; i++) {

                        if (i == 0) {
                            cells = rows[i].split(";");
                            counter = cells.length;
                        }
                        else {
                            cells = rows[i].split(";");
                        }

                        if (cells.length == counter && i != 0) {
                            cells[lineToReplace] = "\"" + vorname[getRandom(0, 999)] + " " + nachname[getRandom(0, 999)] + "\"";
                        }

                        console.log(strWholeFile);

                        /** For every column the loop will
                         *  be executed once **/
                        for (var j = 0; j < cells.length; j++) {
                            strWholeFile += cells[j] + ";";
                            console.log(strWholeFile);
                        }
                        if (cells.length == counter) {
                            strWholeFile += "\n";
                            console.log(strWholeFile);
                        }
                    }
                };
                reader.readAsText(fileUpload.files[0]);
            }
            else {
                alert("Dieser Webbrowser unterstützt kein HTML5.");
            }
        }
        else {
            alert("Bitte wählen Sie einen gültige CSV-Datei aus.");
        }
    }

你们中有人对如何解决我的问题有聪明但仍然简单的想法吗?我已经学习 Javascript 1 个月了,所以我不太了解 JavaScript(我不是新兵)。

最佳答案

我改变了线路

var rows = e.target.result.split("\n");

var rows = e.target.result.split("\"\n");

CSV 文件行的每一端如下所示:

"data"#BREAK

因此,我不是只查询中断,而是查询引号和中断

行尾示例:

"data"#Break

内部数据中断示例:

"Login#BREAK

Email[...]"

关于javascript - CSV 格式破坏了我替换客户数据的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45324422/

相关文章:

python - 在 python 中使用 csv 文件并输出 json

javascript - vue js中登录成功后如何重定向到dashboard组件页面(登录组件)?

数组的 jQuery 构建在第一个正在执行的函数中不起作用

java - 如何将 List<String> 写入 csv 文件并使用 supercsv 读回

java - 主要似乎跳过了我的方法之一

java - 不同大小的多维数组

javascript - 导出为 CSV 时的编码问题

javascript - AngularJS:我应该如何动态设置 $http 的参数?

JavaScript 重新加载整个页面

javascript - 如果输入上有 onBlur 处理程序,将不会调用表单上的 React onSubmit 处理程序? (仅在使用 Webstorm js 调试器时发生)