JQuery-CSV не анализирует все значения - PullRequest
0 голосов
/ 27 августа 2018

Я использую jquery.csv для анализа файла CSV и отображения данных в табличном формате.

Данные моего CSV-файла: test.csv

header1, header2, header3, header4
value1, value2, value3, value4
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4

Мой код: index.html

    var data;

    $.ajax({

        type: "GET",

        url: "test.csv",

        dataType: "text",

        success: function(response) {

            data = $.csv.toObjects(reponse);

            // generating the table for user view
            generateTable(data);

        var html = generateTable(data);

        $('#result').html(html);

    }

});

function generateTable(data) {

    var html = '';

    if (typeof(data[0]) === 'undefined') {

        return null;

    }

    if (data[0].constructor === Object) {

        for (var row in data) {

            html += '<tr>\r\n';

            for (var item in data[row]) {

                html += '<td>' + item + ':' + data[row][item] + '</td>\r\n';

            }

            html += '</tr>\r\n';

        }

    }

    return html;

}

Код не генерирует ошибку, и в таблице показано, что я печатаю одно значение на заголовок, но я хотел бы знать, как я могу получить несколько значений на заголовок? Как и для header4, есть несколько значений, и я хотел бы, чтобы все значения в ячейке для header4. Или, если вы можете предложить какой-либо лучший способ анализа такого рода данных, я был бы признателен. спасибо!

JSFiddle

http://jsfiddle.net/xpvt214o/685678/

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Итак ... Теперь я понял твой вопрос, хе-хе. Вот и мы:

            function generateTable(lines) {
                if (typeof(lines) === 'undefined' || lines.length == 0) {
                    return '';
                }
                var header = lines[0].split(',');
                var html = '';
                for (var row in lines) {
                    if(row == 0) {
                        continue;
                    }
                    html += '<tr>\r\n';
                    var cols = lines[row].split(',');
                    for (var col in cols) {
                        var item = header[col] ? header[col] : header[header.length-1];
                        html += '<td>' + item + ':' + cols[col] + '</td>\r\n';
                    }
                    html += '</tr>\r\n';
                }
                return html;
            }
            $.ajax({
                type: "GET",
                url: "test.csv",
                dataType: "text",
                success: function(response) {
                    $('#result').html(generateTable($.csv.parsers.splitLines(response)));
                }
            });

Вы не можете делать то, что хотите, просто используя парсер по умолчанию. Поэтому вы должны создать свой собственный парсер с $.csv.parsers.splitLines помощником (вы можете прочитать об этом там ). Таким образом, вы можете делать все, что хотите, с этими значениями случаев переполнения. В вашем случае вы хотите использовать последний «заголовок столбца» в качестве заголовка этих значений, верно? Это происходит в этой строке:

var item = header[col] ? header[col] : header[header.length-1];

Если этот столбец существует в определении заголовка, он будет вызывать имя заголовка. Если этого не произойдет, будет вызван последний заголовок Это все?

0 голосов
/ 27 августа 2018

Я проверил вашу скрипку и сделал console.log, чтобы позволить мне распечатать ваш разобранный объект csv. Она печатает переменную без последних двух элементов из строки 3. Ваша проблема в том, что парсер csv отбрасывает эти элементы. Я думаю, что это происходит из-за вашего недействительного CSV.

Вы должны добавить свой CSV следующим образом:

header1, header2, header3, header4,header4.2,header4.3
value1, value2, value3, value4,,
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4,,

Я думаю, что csv-парсеру нужно одинаковое количество элементов в каждой строке.

Я протестировал этот CSV в вашей скрипке, и он показывает все элементы, но добавил пустые или неопределенные для 2-й и 4-й строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...