Ferramentas de CSV
Ferramentas de processamento de CSV.
by Rui Leite
HTML
<h1>Ferramentas de Cabeçalhos</h1>
<p>
URL do Fiddle:
<a href="http://jsfiddle.net/ruipimentel/wffo0z4m/" target="_blank">Ferramentas de Cabeçalhos</a>
</p>
<hr />
<p>
Cole o cabeçalho da procedure ou function abaixo.
</p>
<p class="formulario">
<textarea id="cabecalho" class="text">
procedure pcExemplo ( p_param1 tabela1.param1%type
, p_param2 tabela1.param2%type
, p_param3 tabela1.param3%type )
</textarea>
<br />
<br />
<span>
Formato de saída:
<input id="formato_saida_pcerro"
name="formato_saida"
value="pcerro"
type="radio"
checked="checked"
/>
<label for="formato_saida_pcerro">pcErro</label>
<input id="formato_saida_par_nome_valor"
name="formato_saida"
value="par_nome_valor"
type="radio"
/>
<label for="formato_saida_par_nome_valor">Par Nome/Valor</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="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>
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: 180px; }
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 extraiParametros(cabecalho){
return cabecalho.trim().replace(/\r?\n/, "").match(/\((.*)\)/)[1];
}
function paraArray(str_data, delimitador_coluna){
var arr_data = str_data.split("\n");
arr_data = arr_data.filter(function(str){
return !str.match(/^\s*$/);
});
arr_data = arr_data.map(function(str){
return str.split(eval("\"" + delimitador_coluna + "\""));
});
return (arr_data);
}
function processar(){
// Recupera dados do formulário:
var cabecalho = $("#cabecalho").val();
var formato_saida = $("input[name=formato_saida]:checked").val();
var alinhar_resultado = $("#alinhar_resultado").is(":checked");
// Obtém um array a partir dos dados do cabeçalho:
var parametros_str = extraiParametros(cabecalho);
// var array = paraArray(cabecalho);
return parametros_str; // TODO TO DO 2DO: remover esta linha.
// 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], " ",...