CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet résolu : Angular: lire un fichier

DébutPage précedente
1
Page suivantePage suivante
Pseudo supprimé
Niveau 20
21 juin 2022 à 19:39:50

Bonjour, est-ce que quelqu'un saurait comment lire un fichier situé dans src/assets/text/fichier.txt ?

Ca a l'air bête comme ça, mais je galère. Autant en Java ou python je sais comment faire, autant en Js avec Angular, quand je cherche sur internet, je vois des solutions pour savoir comment lire un fichier qu'un client dépose sur le site (ce que je ne VEUX PAS faire, puisque le fichier se trouve dans le projet Angular).

Mon but est d'itérer ligne par ligne dans le fichier texte pour stocker l'info quelque part (dans un tableau ou un composant par exemple), afin de l'afficher sur une page html.

Message édité le 21 juin 2022 à 19:40:32 par
Hermeticae Hermeticae
MP
Niveau 9
22 juin 2022 à 01:40:31

Tu as essayé avec fetch() ?

https://developer.mozilla.org/fr/docs/Web/API/Fetch_API

Pseudo supprimé
Niveau 20
22 juin 2022 à 10:54:09

j'ai essayé avec

fetch('src/assets/text/system.txt').then(function(response) {
      if(response.ok) {
        response.blob().then(function(myBlob) {
          var objectURL = URL.createObjectURL(myBlob);
          // myImage.src = objectURL;
          console.log('c\'est bon!');
        });
      } else {
        console.log('Mauvaise réponse du réseau');
      }
    })
      .catch(function(error) {
        console.log('Il y a eu un problème avec l\'opération fetch: ' + error.message);
      });

mais ça me génère une erreur puisque j'ai l'impression que ça va chercher la ressource côté client, et pas côté serveur (alors que je détiens le fichier texte dans les sources du projet...). Du coup, je vois pas trop comment faire :(

dom14e dom14e
MP
Niveau 5
22 juin 2022 à 14:34:07

Angular => situé sur le front
Ton fichier (src/...) => situé sur le back
Donc pour lire le fichier en question, une requête HTTP sera nécessaire sauf si tu le compiles directement dans le JS avec NodeJS (ce que je te conseille donc de faire).

Pour l'ajouter ainsi c'est assez simple, suffit d'utiliser le FileSystem de NodeJS.

const fs = require('fs');

fs.readFile('src/assets/text/fichier.txt', 'utf8', function(err, data) {
   const content = data;
   console.log(content);
});

Pour le reste je te laisse voir la doc de fs.

Pseudo supprimé
Niveau 20
22 juin 2022 à 15:20:14

Salut, merci pour ta réponse.

src/app/file/file.component.ts:3:21 - error TS2307: Cannot find module 'fs' or its corresponding type declarations.

3 import * as fs from 'fs';

Il existe pas une autre solution sinon ? System import c'est pas mieux ? :(

Pseudo supprimé
Niveau 20
22 juin 2022 à 15:25:25

j'ai essayé aussi avec

const fs = require('fs');
    
    const data = fs.readFileSync('src/assets/text/fichier.txt',
      {encoding:'utf8', flag:'r'});

    console.log(data);

dans la console j'ai l'erreur suivante


ERROR TypeError: fs.readFileSync is not a function

marrant comme j'ai jamais autant galéré à ouvrir un simple fichier avec un langage ou un framework, c'est peut-être que Angular est pas fait pour :rire:

Pseudo supprimé
Niveau 20
22 juin 2022 à 19:00:06

ou alors peut-être que je devrais connecter Angular à firebase ou un truc du genre pour aller chercher mes infos là bas ? je sais plus quoi faire, j'ai plus d'idées https://image.noelshack.com/fichiers/2017/17/1493315937-sombra15.png

wouh_pinaise_ wouh_pinaise_
MP
Niveau 6
22 juin 2022 à 20:14:08

Quel est l'intérêt d'avoir un fichier dans le dossier assets ? S'agit-il d'une conf ou alors de données pour remplir un tableau ou autre ?
S'il s'agit de données, ne serait-il pas judicieux d'utiliser firestore pour avoir une base de données (vu que tu parles de firebase) ?

Je n'ai jamais utilisé fs, mais pour debug, tu peux soit ouvrir le debugger de ton navigateur et mettre un point d'arrêt, soit faire un console.log(fs) pour voir si l'objet n'est pas nul.
Mais ça semble bien être ce que tu as fait : https://nodejs.dev/learn/reading-files-with-nodejs

Sinon une autre possibilité est d'utiliser httpClient apparemment

constructor(http: HttpClient) {
    this.httpClient = http;
  }

et ensuite dans le code

this.httpClient.get('assets/text/fichier.txt', { responseType: 'text' })
      .subscribe(data => console.log(data));
Pseudo supprimé
Niveau 20
22 juin 2022 à 21:21:39

merci, je vais essayer tes solutions

Quel est l'intérêt d'avoir un fichier dans le dossier assets ? S'agit-il d'une conf ou alors de données pour remplir un tableau ou autre ?

S'il s'agit de données, ne serait-il pas judicieux d'utiliser firestore pour avoir une base de données (vu que tu parles de firebase) ?

oui, c'est exactement ça: ce sont des données pour remplir un tableau, c'est tout. Je me dis que utiliser la base de données pour ça c'est un peu overkill... :(

Pseudo supprimé
Niveau 20
23 juin 2022 à 12:52:29

c'est bon, ça fonctionne, merci :) la requête affiche 200 !

En fait j'ai dû aller dans le fichier angular.json et ajouter

"assets": [
              "src/favicon.ico",
              "src/assets",
              "assets"
            ],

(ou tout chemin m'étant nécessaire pour aller chercher mon fichier au bon endroit!).

Ca marche avec la solution de wouh_pinaise, mais au final j'ai opté pour celle-ci (pour pouvoir traiter le texte après):

readFile(){
    fetch('assets/text/system.txt')
      .then(response => response.text())
      .then(data => {
        console.log(data);

        // Do something with your data
      });
  }

merci beaucoup pour votre aide :)

Message édité le 23 juin 2022 à 12:52:51 par
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : Thymotep
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment