Array asociativos de un CSV file con JavaScript, Ejemplo criptomonedad.csv

Array Asociativos en JS, una Aplicación Actual


Definición:

   Un array asociativo es un Objeto de JavaScript que representa un tipo de dato y relaciona una Clave (key) con un  dato Valor. Su Estructura esta definida  {  } y los TAGs montados en la siguiente forma: key : value.  De esta forma su estructura es semejante a un archivo JavaScript Object Notation File (JSON) pero se diferencia en que son objetos dato.

Ejemplo:

let miAsociativo = {'nombre': 'Jon', 'ciudad' : 'Bogota', 'fecha': '10 Enero 2020'};

Acceder a los datos o las keys involucra negociar usando una estrategia en JS donde tomamos todo el array asociativo y llamamos a su propiedad.

Object.keys 

   Con el obtenemos un array indexado de sus Keys.   Un ejemplo práctico sería:

Resultado del ejemplo 1

Object.values

 Con el obtenemos los valores del array asociativo.   Su código de implementación sería : 

console.log('Soy un array indexado de los values de un asociativo -->',Object.values(miAsociativo));

 

Aplicación Actual de una array Asociativo: 

   Si bien el JavaScript (JS), emigro de los browsers para quedarse en nuestras vidas, ¿Qué pasa cuando los datos que manejamos son archivos? . Ya tenemos varios Módulos para tratar estos requerimientos.!!!!

 

 

csv-parser (transformar archivos de CSV en arrays con JS)

 

Dados que los Archivos CSV tienen formatos y reglas muy distintas a los array en JS por ser un tipo DATASET no es imposible tratarlos.

Este proyecto de tipo OPENSource esta disponible desde el gestor de Módulos ("paquetes") npm. Sus detalles están a disposición de todos. 

Visita https://www.npmjs.com/package/csv-parse

 los pasos para su uso son muy sencillos:

  • Primero abre tu Microsoft Excel (el más actualizado) convierte tu tabla Excel  a formato CSV.  ve a FILE --> SAVE AS --> (ELIGE TIPO) csv utf-8
  • Segundo la Locación del archivo de ser el mismo que tu script. Ejemplo C:\clase2.js  , entonces  miarchivo.csv
  • Tercero Instala localmente el modulo usando el npm ( debes tener una versión actual de NODEjs instalada en tu PC. ver https://nodejs.org/en/download/ )  esto lo haces en tu Terminal escribiendo
    C:\tuFolderDirectorio> npm i -s csv-parser ​
    C:\TuDirectorio> npm i -s fs​

 

suponiendo usas Windows.  pero si es Linux tu preferencia usa "sudo"  + tu instrucción + ENTER.

  • Cuarto requiere tu modulo. En este punto El streaming del archivo debe realizarce por ello  usas 'fs'  y luego el csv-parser       
var fs = require('fs'); 
var parse = require('csv-parser');

Acá se puede destacar que no es estricto la manera como deseas abarcar tu estrategia. Puedes usar un 'const' si la pasaras como parámetros a las funciones que creas o lo usas como un apuntador de referencia a sus funciones como módulo (closure ) con 'var'.

  • Quinto usas una estrategia según tu aplicación (ver https://csv.js.org/parse/options/)  en este caso me interesa las celdas con sus valores y los títulos de cada columna de mi archivo CSV. 
const parseador = parse({
    delimiter: ';',//Delimitador, por defecto es la coma ,
    cast: true, // Intentar convertir las cadenas a tipos nativos
    comment: '#' // El carácter con el que comienzan las líneas de los comentarios, en caso de existir
});

siguiendo esta estrategia, cada vez que el streaming me da un caracter seguido por un  ';'  trato de tomar su valor numérico o string. Recuerda cada celda comienza en ';' y termina en ';'.

  • Sexto con la estrategia definida tomas la propiedad 'readable',  para poder extraer la información del CSV file
parseador.on('readable', function () {
    let buf = new Array();
    let buf2 = new Array();
    let buf3 = new Array();
    let tags = new Array();
    var i = 0;
    let criptomoneda = new Array(); // soy un array 
    if(fila = parseador.read()) {   
            
            buf.push(Object.keys(fila));
           // soy un array asociativo o lista tipo diccionario        
    }
    var buf_str = new String(buf[0]);
    tags = buf_str.split(";");
    tags.pop();

    while(fila = parseador.read()) { 
        buf2.push( new String(Object.values(fila)));                
    }  
    var j;
    for(i = -1; i < buf2.length; i++){
        buf3 = buf2[1].split(";");
        for( j = 0; j < tags.length; j++){
            criptomoneda[tags[j]] = buf3[j];
        }        
    }


    

    console.log(criptomoneda);
    //console.log(tags);
});

 

y listo acá ya tiene tu array asociativo de una fila y así con todo tu archivo.

  • Solo resta invocarlo cuando creas el streaming del archivo.
fs.createReadStream("criptomonedas.csv") // Abrir archivo
    .pipe(parseador) // Pasarlo al parseador a través de una tubería
    .on("end", function () {// Y al finalizar, terminar lo necesario
        console.log("Se ha terminado de leer el archivo");
        parseador.end();
    });

 

para mi ejemplo el resultado en mi visual studio code es :

Array asociativo del archivo CSV

Si deseas conocer un poco mas Puedes contactarme y con gusto puedo dictarte un curso de array o alguna clase particular.

https://www.tusclases.co/profesores/oskar-gelves-pdig.htm

How do you rate this article?

1


OSKAR GELVES
OSKAR GELVES

Profesor de programación en JavaScript, php, c, c++ y c#, apasionado por el mundo de los smartcontracts. Escribo contenido sobre Aritmética y lógica usando lenguajes de programación orientada a los estudiantes de universidades de carreras de Ingenieria.


Un acercamiento practico a JavaScript en NODEjs
Un acercamiento practico a JavaScript en NODEjs

En este acercamiento a JavaScript conocerás Array indexados, Array Asociativos, Multidimensionales, Módulos NODEjs para este tipo de Objeto y Métodos de parsing con sus estrategias en Módulos con ejemplos prácticos, que te harán ver aplicaciones reales en Estadística Básica , Algebra Matricial y mas.... Por que JavaScript ya dejo los browsers para quedarse en nuestras vidas!!!!!

Send a $0.01 microtip in crypto to the author, and earn yourself as you read!

20% to author / 80% to me.
We pay the tips from our rewards pool.