IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Go Discussion :

Comment lire un fichier text ligne par ligne en détectant le format


Sujet :

Go

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 837
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 837
    Points : 996
    Points
    996
    Par défaut Comment lire un fichier text ligne par ligne en détectant le format
    Bonjour,

    J'essaie de traiter un fichier texte ligne par ligne.
    Au début, j’avais essayé de le lire avec les fonctions standards de go mais ça ne m'affichait pas correctement les caractères spéciaux car le fichier n'est pas encodé en UTF8.

    J'ai réussi à résoudre le problème en faisant comme ça (en m'inspirant de codes trouvés sur le Internet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    package main
     
    import (
    	"bufio"
    	"fmt"
    	"log"
    	"os"
     
    	"golang.org/x/text/encoding/charmap"
    	"golang.org/x/text/transform"
    )
     
    func main() {
    	const filenameUTF8 = "test_in_utf8.txt"
    	readFile(filenameUTF8, false)
     
    	const filename = "test_in.txt"
    	readFile(filename, true)
    }
     
    func readFile(filename string, convertToUTF8 bool) {
    	// Read UTF-8
    	f, err := os.Open(filename)
    	if err != nil {
    		log.Fatal(err)
    	}
     
    	var sc *bufio.Scanner
    	if convertToUTF8 {
    		// Pour lire fichier ANSI
    		var enc = charmap.Windows1252
    		r := transform.NewReader(f, enc.NewDecoder()) // convert file format
    		sc = bufio.NewScanner(r)
    		fmt.Printf("Read mode %s\n", "ANSI")
    	} else {
    		// Pour lire fichier UTF8
    		sc = bufio.NewScanner(f)
    		fmt.Printf("Read mode %s\n", "UTF8")
    	}
     
    	for sc.Scan() {
    		fmt.Printf("Read line: %s\n", sc.Bytes())
    	}
    	if err = sc.Err(); err != nil {
    		log.Fatal(err)
    	}
     
    	if err = f.Close(); err != nil {
    		log.Fatal(err)
    	}
    }
    ... J'ai mis en pièces jointes, le même fichier d'exemple mais sous deux formats différents.
    ... mais je ne comprends pas bien ce que ça fait exactement.
    Le format Windows1252, c'est quoi exactement ? ... C'est le format de sortie de la console Windows ? ... donc ça veut dire que si je veux compiler ce programme pour Linux, ça ne fonctionnera pas (comment faut-il faire ?) ?
    Comment faire pour détecter automatiquement le format d'encodage du fichier source ?


    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué Avatar de ane-mais
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 37
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    Peut-être en testant l’existence de caractères spécifiques à chaque encodage pour définir lequel est employé ?

    Sinon il y a une entête dans le fichier, plus d'info sur https://www.unicode.org/faq/utf_bom.html

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 837
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 837
    Points : 996
    Points
    996
    Par défaut
    Le problème est que je ne suis pas un connaisseur à propos de tous les formats existants : ça risque d’être très compliqué d'identifier le format en gérant tous les cas... go ne propose pas de fonctions pour simplifier le job ?

Discussions similaires

  1. [AC-2013] Comment lire un fichier texte caractère par caractère
    Par alpha_du_centaure dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/05/2017, 08h47
  2. Comment lire un fichier texte ligne par ligne (Chrome App)
    Par Renaud976 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/08/2015, 14h39
  3. Réponses: 2
    Dernier message: 19/06/2011, 12h13
  4. Comment lire un fichier texte phrase par phrase
    Par Mom's dans le forum Général Python
    Réponses: 13
    Dernier message: 12/02/2007, 15h48
  5. Lire un fichier texte ligne par ligne
    Par LeLaid dans le forum Access
    Réponses: 7
    Dernier message: 05/12/2006, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo