Ferramentas de CSV
Ferramentas de processamento de CSV.
by Rui Leite
HTML
<h1>Ferramentas de CSV</h1>
<p>
URL do Fiddle:
<a href="http://jsfiddle.net/ruipimentel/v0b3bu41/" target="_blank">Ferramentas de CSV</a>
</p>
<hr />
<p>
Cole o CSV abaixo. A primeira linha deve ser de títulos.
</p>
<p class="formulario">
<textarea id="csv" class="text"> SETORCODNR UNIDCODNR
13 41 12
12 9 13</textarea><br />
<span>
<label for="delimitador_coluna">Delimitador de coluna:</label>
<input id="delimitador_coluna" type="text" value="\t" size="5" />
</span>
<br />
<span>
Formato de saída:
<input id="formato_saida_par_nome_valor"
name="formato_saida"
value="par_nome_valor"
type="radio"
checked="checked"
/>
<label for="formato_saida_par_nome_valor">Par Nome/Valor</label>
<input id="formato_saida_insert"
name="formato_saida"
value="insert"
type="radio"
/>
<label for="formato_saida_insert">INSERT</label>
<input id="formato_saida_js_params"
name="formato_saida"
value="js_params"
type="radio"
/>
<label for="formato_saida_js_params">js_params</label>
<input id="formato_saida_json"
name="formato_saida"
value="json"
type="radio"
/>
<label for="formato_saida_json">JSON</label>
</span>
<br />
Demais opções:
<span>
<input id="ignorar_primeira_coluna" type="checkbox" checked="checked" />
<label for="ignorar_primeira_coluna">Ignorar 1ª coluna</label>
</span>
<span>
<input id="alinhar_resultado" type="checkbox" checked="checked" />
<label for="alinhar_resultado">Alinhar resultado</label>
</span>
<br />
<span>
<button id="converter">Processar</button>
<button id="baixar">Processar e baixar</button>
</span>
<br />
<textarea id="resultado" class="text"></textarea>
</p>
<hr />
<p>
Baseado em:
<a href="http://jsfiddle.net/sturtevant/vUnF9/" target="_blank">JSON to CSV Converter</a>
</p>
CSS
body { padding: 5px 10px; }
hr { margin: 20px 0; }
p { margin: 10px 0; }
h1 { font-size: x-large; font-weight: bold; }
p.formulario span { display: inline-block; margin: 5px 10px 5px 0; }
textarea { width: 99%; height: 200px; }
input { margin-left: 10px; }
JavaScript
function rpad(str_inicial, str_preench, tamanho){
var str = str_inicial;
while(str.length < tamanho) str += str_preench;
return str;
}
function paraArray(strData, delimitador_coluna){
var arrData = strData.split("\n");
arrData = arrData.filter(function(str){
return !str.match(/^\s*$/);
});
arrData = arrData.map(function(str){
return str.split(eval("\"" + delimitador_coluna + "\""));
});
return (arrData);
}
function processar(){
// Recupera dados do formulário:
var csv = $("#csv").val();
var delimitador_coluna = $("#delimitador_coluna").val();
var formato_saida = $("input[name=formato_saida]:checked").val();
var ignorar_primeira_coluna = $("#ignorar_primeira_coluna").is(":checked");
var alinhar_resultado = $("#alinhar_resultado").is(":checked");
var csv_tem_aspas = $("#csv_tem_aspas").is(":checked");
// Obtém um array a partir dos dados do csv:
var array = paraArray(csv, delimitador_coluna);
// Extrai estatísticas a partir do array:
var tamanho_maior_titulo = array[0].reduce(function(hist, atual){
return Math.max(hist, atual.length);
}, 0);
var tamanho_maior_valor = array.map(function(arr){
return arr.reduce(function(hist, atual){
return Math.max(hist, atual.length);
}, 0);
}).slice(1).reduce(function(hist, atual){
return Math.max(hist, atual);
}, 0);
var tamanho_maior_ultima_coluna = array.map(function(arr){
return arr[arr.length - 1].length;
}).reduce(function(hist, atual){
return Math.max(hist, atual);
}, 0);
// Converte para o formato selecionado:
var str;
switch(formato_saida){
/*************
PAR NOME/VALOR
*************/
case "par_nome_valor":
str = rpad("", "-", tamanho_maior_titulo + 2 + tamanho_maior_valor) + "\n";
for(var l = 1; l < array.length; l++){
for(var c = (ignorar_primeira_coluna ? 1 : 0); c < array[l].length; c++){
str += rpad(array[0][c], " ", alinhar_resultado ? tamanho_maior_titulo :...