How to read a CSV File that is located in SubFolders

Created by Jose Fabian Solano, Modified on Thu, 18 May, 2023 at 5:32 PM by Jose Fabian Solano

For this example we have a client that have a path: C:\TestFile\in\vNode, inside the folder vNode the client has a subFolders


and inside of this folder, the client has the same csv with differenet timestamp:



The first step is create a module scripting, after that its necessary create a Task and Action. So in the part of Script, we are gonna use this code:


///////////////////////////////////////////////////////////////////////////////////////////////////


const fs = require('fs');

const path = require('path');


const carpetaRaiz = 'C:\\TestFile\\in\\vNode';


// Obtener la lista de subcarpetas en la carpeta raíz

const subcarpetas = fs.readdirSync(carpetaRaiz, { withFileTypes: true })

  .filter(dirent => dirent.isDirectory())

  .map(dirent => dirent.name);


let subcarpetaMasNueva = null;

let fechaModificacionMasNueva = null;


// Recorrer las subcarpetas y comparar las fechas de modificación

subcarpetas.forEach(subcarpeta => {

  const rutaSubcarpeta = path.join(carpetaRaiz, subcarpeta);

  const fechaModificacion = fs.statSync(rutaSubcarpeta).mtime;


  if (!fechaModificacionMasNueva || fechaModificacion > fechaModificacionMasNueva) {

    subcarpetaMasNueva = subcarpeta;

    fechaModificacionMasNueva = fechaModificacion;

  }

});


$.logger.debug("La Subcarpeta mas nueva es: " + subcarpetaMasNueva);



const dirPath = 'C:\\TestFile\\in\\vNode\\'+subcarpetaMasNueva; //  La ruta donde se tienen que almacenar los archivos csv.


$.logger.debug("La nueva ruta de la carpeta es: "+ dirPath);



const archivos = fs.readdirSync(dirPath);// Obtener la lista de archivos en la carpeta


// Ordenar la lista de archivos por fecha de modificación (el más reciente primero)

archivos.sort((a, b) => {

  return fs.statSync(path.join(dirPath, b)).mtime.getTime() - fs.statSync(path.join(dirPath, a)).mtime.getTime();

});


// Seleccionar el último archivo de la lista y leerlo con fs.readFileSync()

const ultimoArchivo = archivos[0]; // Lee la posicion 0 de los archivos ordenado de forma mas reciente.

$.logger.debug("Estoy leyendo el archivo:" + ultimoArchivo);

const rutaUltimoArchivo = path.join(dirPath, ultimoArchivo); // U

const contenidoUltimoArchivo = fs.readFileSync(rutaUltimoArchivo, 'utf-8');


//$.logger.debug("Este es el archivo que intento leer: " + rutaUltimoArchivo);

//$.logger.debug("Este es el archivo que intento leer: " + contenidoUltimoArchivo);


const lineas = contenidoUltimoArchivo.split('\n');


////////////////////////////Tengo que hacer un for que recorra todo el archivo. //////////////////


for(let a = 0; a < lineas.length; a++){ // Se declara un for para recorrer la longitud del archivo csv

const nombresColumnas = lineas[a].split(','); 

$.logger.debug("Este es el nombre de las columnas = " + nombresColumnas);

let nombres = nombresColumnas.toString();

$.logger.debug("ESte es el nombre ya paso a String: " + nombres);

let primerValor = nombres.split(',')[0]; // Obtener el nombre del tag, antes de la coma.

$.logger.debug("Primer valor es: " + primerValor);

let segundoValor = nombres.split(',')[1]; // Obtener el valor del tag, despues de la coma.

$.logger.debug("Segundo valor es: " + segundoValor);



////////////////////////////// Eliminando comillas a las variables ////////////////////////////////

 

primerValor = primerValor.replace(/^"|"(\s)*$/g, ''); // Remplazamos todo los 

$.logger.debug("El primer valor corregido es: " + primerValor);

segundoValor = segundoValor.replace(/^"|"(\s)*$/g, '');

$.logger.debug("El segundo valor corregido es: " + segundoValor);


////////////////////////////////Asignacion de valores al TAG //////////////////////////////////////

  

 $.api.tag.update('/CSV/'+primerValor,segundoValor,192,new Date().getTime(),true);

  



}// Este es la llave de cierre del for que recorre la longitud del archivo csv. Linea 54

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article