import path from 'path'; import fs from 'fs' import { writeFile, mkdir } from 'fs/promises' import readline from 'readline'; 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}`); } }