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