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, ",",...