11110 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
je commence tout juste un stage après une courte formation dans le code, je suis donc encore un bambin dans le domaine

Je dois pour mon stage créer un code qui permettra de convertir des fichiers csv en format json
Il y avait encore des problèmes après qu'il soit fonctionnel

import fs from 'fs';
//const fs = require('fs')
fs.readFile('OF1.csv', 'utf8', (err, file) => {
  if (err) throw err;
  //supression des espaces
  file = file.replace(/ /g, '')
  // Lignes et entêtes de colonnes
  const lines = file.split('\r\n').filter((line, i) => i > 1)
  const columns = lines[0].split(';')
  // Largeurs et hauteurs
  const largeurs = columns.filter((col, i) => i > 0).map(col => +col)
  var hauteurs = []
  var prices = []
  var result = {
    largeurMin: Math.min(...largeurs),
    largeurMax: Math.max(...largeurs),
  }
  

  for (var i = 0; i < lines.length; i++) {
    const line = lines[i]
    const lineData = line.split(';')
    const hauteur = +lineData[0]
    
      if (+lineData[0] > 0) hauteurs.push(hauteur)
        for (var j = 0; j < columns.length; j++) {
          var priceObject = {
          hauteur: hauteur,
          largeur: largeurs[j],
          price: +lineData[j + 1],
        }
        prices.push(priceObject)
      }
      
  }
]

  
  result.hauteurMin = Math.min(...hauteurs)
  result.hauteurMax = Math.max(...hauteurs)
  result.prices = prices
  console.log(result)
  
 
});


J'ai donc essayé en cherchant sur le net de résoudre le problème visible en première image, à savoir que les premières lignes (les valeurs largueurs servant aussi de colonne) n'aient plus cet attribut NaN, pareil pour la ligne en bas, qui se répète dans la suite du code, ce à chaque fois qu'on passe à une nouvelle ligne du tableau (du tableau csv, pas tableau au sens array)

Mais il semble que j'ai fait plus de dégâts qu'autre chose, en témoigne la suite que je vais vous poster

[EDIT] Formatage du code avec les balises Smiley cligne
Modifié par _laurent (07 Apr 2021 - 17:40)
Le code une fois modifié


import fs from 'fs';
//const fs = require('fs')
fs.readFile('OF1.csv', 'utf8', (err, file) => {
  if (err) throw err;
  //supression des espaces
  file = file.replace(/ /g, '')
  // Lignes et entêtes de colonnes
  const lines = file.split('\r\n').filter((line, i) => i > 1)
  const columns = lines[0].split(';')
  // Largeurs et hauteurs
  const largeurs = columns.filter((col, i) => i > 0).map(col => +col)
  var hauteurs = []
  var prices = []
  var result = {
    largeurMin: Math.min(...largeurs),
    largeurMax: Math.max(...largeurs),
  }
  

  for (var i = 0; i < lines.length; i++) {
    const line = lines[i]
    const lineData = line.split(';')
    const hauteur = +lineData[0]

      prices.forEach(function(price){
    
      if(isNaN(hauteur) === false || isNaN(price) === false){
      
      if(+lineData[0] > 0) hauteurs.push(hauteur)
        for (var j = 0; j < columns.length; j++) {
          var priceObject = {
          hauteur: hauteur,
          largeur: largeurs[j],
          price: +lineData[j + 1],
        }
        prices.push(priceObject)
      }

    } else {
      line.spice
    
      
  }
  })
  

  
  result.hauteurMin = Math.min(...hauteurs)
  result.hauteurMax = Math.max(...hauteurs)
  result.prices = prices
  console.log(result)
  
 
};
})


Le terminal m'indique désormais ce json là
largueur min: 400,
largueur max: 1100,
hauteur min: Infinity (erreur donc)
hauteux max: -Infinity (autre erreur)
prices [ ] (oui, l'array devient vide)

Désolé d'avance si je ne suit pas très clair, et merci pour vos prévisions et conseils

[EDIT] Pareil
Modifié par _laurent (07 Apr 2021 - 17:40)
Modérateur
Salut,

J'ai édité tes postes, pense a utiliser les blocs de code c'est plus sympa.

Procédons par étapes : Avant d'entamer ta boucle for, est-ce que tu as vérifié ce qu'il y avait dans lines columns largeurs et résult pour être sur que ton fichier a bien été découpé ?

Ensuite est-ce que ca boucle itère bien le bon nombre de fois ?

Ensuite tu fais un prices.forEach alors que prices est un tableau vide il me semble...

Il faut aussi bien réindenter ton code parce que la c'est difficile de voir si tout est bien imbriqué.

Ca fait déjà un bon début. Smiley smile