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}`);
|
|
|
|
}
|
|
|
|
}
|