JSFiddle - React, Tailwind, and code Playground
by disfated
HTML
<textarea id="t">"IsChecked","Фраза","Источник","Дата добавления","Частотность [WS]","Частотность * * [WS]","Частотность *!* [WS]","Сезонность [WS]","Конкуренция в ПС Яндекс [KEI]","Конкуренция в ПС Google [KEI]","Рел. страница в ПС Яндекс","Рел. страница в ПС Google",
"False","борта для паллет","YandexWordstatLeftColumn","08.12.2013 1:16:21","17","8","8","","136000","78700000","","",
"False","борта для поддонов","YandexWordstatLeftColumn","08.12.2013 1:16:25","41","8","8","","497000","901000","","",
"False","поддон пластиковый с бортами","YandexWordstatLeftColumn","08.12.2013 1:16:25","36","33","31","","275000","3340000","","",
"False","европоддоны металлические","YandexWordstatLeftColumn","08.12.2013 1:16:37","28","8","6","","114000","166000","","",
"False","контейнер каркасный","YandexWordstatLeftColumn","08.12.2013 1:16:46","34","3","2","","1000000","14400000","","",
"False","контейнер металлический","YandexWordstatLeftColumn","08.12.2013 1:16:51","4724","218","109","","2000000","1240000","","",
"False","блок контейнер металлический","YandexWordstatLeftColumn","08.12.2013 1:16:51","1000","290","255","","1000000","249000","","",
"False","куплю металлический контейнер","YandexWordstatLeftColumn","08.12.2013 1:16:51","724","52","4","","2000000","2540000","","",
"False","купить контейнер металлический","YandexWordstatLeftColumn","08.12.2013 1:16:51","717","52","46","","2000000","2750000","","",
"False","контейнеры металлические цена","YandexWordstatLeftColumn","08.12.2013 1:16:51","241","17","10","","2000000","3340000","","",
"False","контейнер металлический с крышкой","YandexWordstatLeftColumn","08.12.2013 1:16:51","173","9","7","","1000000","1880000","","",
"False","контейнеры для тбо металлические","YandexWordstatLeftColumn","08.12.2013 1:16:51","159","32","29","","418000","1870000","","",
"False","контейнеры для мусора металлические купить","YandexWordstatLeftColumn","08.12.2013 1:16:51","132","57","38","","388000","889000","","",
"False","металлические...
JavaScript
function parse(csv, separator, delimiter) {
var data = [];
var entry = [];
var state = 0;
var value = '';
var exit = false;
rowNum = 1;
colNum = 1;
function endOfEntry() {
endOfValue();
data.push(entry);
entry = [];
rowNum++;
colNum = 1;
}
function endOfValue() {
entry.push(value);
value = '';
state = 0;
colNum++;
}
function err(msg) {
return new Error('' + msg + ' [' + rowNum + ':' + colNum + ']');
}
function regExpEscape(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
var S = regExpEscape(separator);
var D = regExpEscape(delimiter);
var reChunks = RegExp('(?:' + D + '|' + S + '|\\r\\n|\\n|\\r|[^' + D + S + '\\r\\n]+)', 'gm');
var reLE = /^(?:\r\n|\n|\r)$/;
var m, m0;
while (m = reChunks.exec(csv)) {
if (exit) break;
m0 = m[0];
switch (state) {
case 0: // the start of a value
if (m0 === separator) {
value += '';
endOfValue();
} else if (m0 === delimiter) {
state = 1;
} else if (reLE.test(m0)) {
endOfEntry();
} else {
value += m0;
state = 3;
}
break;
case 1: // delimited input
if (m0 === delimiter) {
state = 2;
} else {
value += m0;
}
break;
case 2: // delimiter found in delimited input
if (m0 === delimiter) {
value += m0;
state = 1;
} else if (m0 === separator) {
endOfValue();
} else if (reLE.test(m0)) {
endOfEntry();
} else {
throw err('Illegal State');
}
break;
case 3: // un-delimited input
if (m0 === separator) {
endOfValue();
} else if (reLE.test(m0)) {
endOfEntry();
} else if (m0 === delimiter) {
throw err('Illegal Quote');
} else {
throw err('Illegal Data');
}
break;
default:
throw err('Unknown State');
}
}
if (entry.length !== 0) {
endOfEntry();
}
return data;
}
$(function() {
$('#b').click(function() {
var str = $('#t').val();
var table = parse(str, ",",...