OpenDataAPI/scripts/helpers/functions.js

95 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-01-24 16:29:09 +01:00
import path from 'path';
import fs from 'fs'
import { writeFile, mkdir } from 'fs/promises'
import readline from 'readline';
2024-02-08 12:28:51 +01:00
export function customSplit(line, separator) {
const parts = [];
let currentPart = '';
let insideQuotes = false;
for (let i = 0; i < line.length; i++) {
const char = line[i];
if (char === '"') {
insideQuotes = !insideQuotes;
} else if (char === separator && !insideQuotes) {
parts.push(currentPart.trim());
currentPart = '';
} else {
currentPart += char;
}
}
parts.push(currentPart.trim());
return parts;
}
2024-01-24 16:29:09 +01:00
export const loadEnvFile = () => {
// Charger les variables d'environnement à partir du fichier .env
const envPath = './.env'; // Spécifiez le chemin correct si différent
const envFile = fs.readFileSync(envPath, 'utf-8');
const envVariables = envFile.split('\n').reduce((acc, line) => {
const [key, value] = line.split('=');
if (key && value) {
acc[key.trim()] = value.trim();
}
return acc;
}, {});
return envVariables
}
export const downloadAndSaveFile = async (url, filename) => {
const folder = path.dirname(filename)
if (!fs.existsSync(folder)) await mkdir(folder)
const response = await fetch(url)
const buffer = Buffer.from(await response.arrayBuffer())
await writeFile(filename, buffer)
}
export const downloadJSON = async (url) => (await fetch(url)).json()
// Fonction pour lire un fichier ligne par ligne et filtrer les lignes en fonction de la condition
export async function filtrerEtEnregistrerLignes(fichierEntree, fichierSortie1, fichierSortie2, condition) {
try {
// Créer un flux de lecture pour le fichier d'entrée
const lecteur = readline.createInterface({
input: fs.createReadStream(fichierEntree),
crlfDelay: Infinity
});
// Créer un flux d'écriture pour le fichier de sortie 1
const fichierSortieStream1 = fs.createWriteStream(fichierSortie1);
// Créer un flux d'écriture pour le fichier de sortie 2
const fichierSortieStream2 = fs.createWriteStream(fichierSortie2);
// Fonction pour traiter chaque ligne du fichier
const traiterLigne = (ligne) => {
// Appliquer la condition à la ligne
if (condition(ligne)) {
// Écrire la ligne dans le fichier de sortie 1
fichierSortieStream1.write(`${ligne}\n`);
} else {
// Écrire la ligne dans le fichier de sortie 2
fichierSortieStream2.write(`${ligne}\n`);
}
};
// Lire chaque ligne du fichier
for await (const ligne of lecteur) {
traiterLigne(ligne);
}
console.log('Filtrage et enregistrement des lignes terminés.');
// Fermer les flux d'écriture
fichierSortieStream1.end();
fichierSortieStream2.end();
} catch (erreur) {
console.error(`Erreur lors du filtrage et de l'enregistrement des lignes : ${erreur.message}`);
}
}