How to transform a simple array into . csv?

Asked

Viewed 52 times

0

I have a simple array that is generated with random numbers

function gerarNumeros() {
  //Defina aqui a quantidade de numeros que serão gerados
  let quantidadeNumeros = document.getElementById("quantidadenumeros").value

  /* - - - - - - - - - - - - - - - - - - - - */
  let arrayNumeros = []
  let contador = 1

  while (contador <= quantidadeNumeros) {
    //Gera um numero de 6 digitos
    let numero = Math.floor(100000 + Math.random() * 900000)

    //Se o numero aleoatóio NÃO está no array, adiciona ele e continua com o while, senão, gera outro
    if (!arrayNumeros.includes(numero)) {
      arrayNumeros.push(numero)
      contador++
    }
  }

  console.log(arrayNumeros)


}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>
  Digite a Quantidade de Números para gerar:
</h3>
<input type="number" id="quantidadenumeros"><br/>
<input type="button" onclick="gerarNumeros();" id="botaoDownload" value="Download CSV">

(Code: https://jsfiddle.net/1pfgnb78/3/ )

Array example:

[223452, 754168, 816518, 826338, 357144, 163946]

How I wish it to stay on file. csv:

inserir a descrição da imagem aqui

  • Hello, put the code in the question and not the link.

2 answers

0


To transform an array into the format you want just one line:

const conteudo = arr.map((nr, i) => `${i+1},${nr}`).join('\n');

If you are doing this on the Node.js server you have to send the file to the client. If you do it in Javascript you can use it directly data:application/octet-stream in the href of a <a>. You can use the button to generate the table and generate a click on <a> which fires into the browser the desired behavior. With the attribute download you can even name the file...

I tried it on Chrome and does what you’re looking for, I haven’t tried it on other browsers but the Javascript I pointed out above works on all modern browsers.

function gerarNumeros() {
  const quantidadeNumeros = Number(document.getElementById("quantidadenumeros").value);
  const arrayNumeros = []
  while (arrayNumeros.length <= quantidadeNumeros) {
    const numero = Math.floor(100000 + Math.random() * 900000)
    if (!arrayNumeros.includes(numero)) {
      arrayNumeros.push(numero)
    }
  }
  return arrayNumeros;
}

function gerarCSV() {
  const arr = gerarNumeros();
  const conteudo = arr.map((nr, i) => `${i+1},${nr}`).join('\n');
  const data = 'data:application/octet-stream,' + encodeURIComponent(conteudo);
  const a = document.querySelector('a');
  a.href = data;
  a.click();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>
  Digite a Quantidade de Números para gerar:
</h3>
<input type="number" id="quantidadenumeros"><br/>
<input type="button" onclick="gerarCSV();" value="Download CSV">

<a style="display: none;" href="" download="tabela.csv"></a>

0

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

arrayfinal = replaceAll(arrayNumeros.toString(), ",", "\n")

console.log(arrayfinal)

Afterward:

~/$ node app.js > codigos.csv

Browser other questions tagged

You are not signed in. Login or sign up in order to post.