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

VB.NET Discussion :

Connaitre le type d'un fichier texte


Sujet :

VB.NET

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut Connaitre le type d'un fichier texte
    Bonjour,

    J'utilise ce code pour connaitre le type de fichier texte (délimité ou à longueur fixe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Using FileReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(strFichier)
                MessageBox.Show(FileReader.TextFieldType.ToString)
     
            End Using
    Or, quel que soit le fichier j'ai toujours Delimité qui ressort, même si c'est un fichier à longueur fixe sans délimiteur (c'est sûr que c'est un fichier à longueur fixe car c'est nous qui le créons).

    Merci de votre retour

    ONTAYG

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,
    Je ne crois qu'il y ait un outil à cet effet.
    Il est possible d'obtenir des éléments de réponse mais ils ne seront absolument sûr (sauf à analyser toutes les lignes) :
    - si les champs sont de longueurs fixes, toutes les lignes du fichier ont la même longueur;
    - si les champs ne sont pas de longueurs fixes, il y a un caractère séparateur entre chacun (la virgule pour un csv, par exemple).
    Il faudrait donc écrire un algorithme d'analyse du fichier ...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bonjour,

    Je te remercie de ton retour.

    Pourtant dans l'aide il semble que ce type d'instruction fonctionne.

    ONTAYG

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Oui ...
    Bien entendu, je ne sais rien du problème que tu traites, mais il me semble qu'ordinairement, on ne "mélange" pas des fichiers de formats différents : Word n'ouvre pas les xls, Excel n'ouvre pas les doc, Notepad non plus, du moins pas de façon "lisible".
    Peut-être que si tu nous en dis plus sur ton projet, il viendra de meilleures idées ..

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bon, quelques explications s'imposent.

    Je travaille dans une société où je reçois différents types de fichiers cela peut-être du .txt, du .csv du excel au autre (ce sont à 99 % des fichiers d'adresses)

    Actuellement nous importons ces fichiers dans Access, qui à l'aide de son assistant nous détecte le type de fichier (délimité et fixe) et on a les fichiers Excel.

    On fait différentes manipulations et de contrôle manuels (code postal, étrangers et autres).

    Ce que l'on souhaite faire c'est un outil où lorsque l'on colle le fichier dedans (par glissement qui fonctionne) on détecte le type de fichier (txt, excel) cela est OK.

    Le but est donc de déterminer si le fichier texte est de type à longueur fixe ou en délimité pour pouvoir le mettre dans une grille pour le visualiser et en même temps lancer des contrôles.

    Ensuite ce fichier quelque soit l'origine sera transformé en csv avec délimiteur.

    Au lieu de faire des cases à cocher ou autre je voulais tester le fichier texte (type et encodage).

    Voilà

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Comme ça je comprends bien et je dois admettre que je n'ai pas de solution. Mais j'espère que quelqu'un pourra t'aider.
    Une suggestion quand même, puisque Access permet le traitement que tu veux, ne t'est-il pas possible d'écrire ton outil en Access ? Perso, j'aurais bien des difficultés à programmer cela, je n'ai jamais été programmeur Access.
    Bonne chance ...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Re

    Je peux le faire sous Access, cela fait des années que je développe avec, et même avant en VB6 mais cela c'est fini.

    Mais je voulais une application autonome et plus rapide, Access est lent quand j'ai de gros fichiers.

    J'arrive à faire pas de truc en vb.net, mais je voulais faire un outil un peu différent.

    Merci quand même

    ONTAYG

  8. #8
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Comment utiliser TextFieldParser.TextFieldType pour déterminer si un fichier est de type longueur fixe ou délimité :

    https://learn.microsoft.com/fr-fr/do...ltiple-formats

    Si la méthode de convient pas, analyser le fichier soit même : lire toutes les lignes et vérifier soit qu'elles ont toutes le même nombre de champs soit qu'elles ont toutes la même longueur. Concernant le format Excel, je pense qu'en début de fichier, il y a quelques octets qui précise que ce fichier est un fichier au format xls ou xlsx.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  9. #9
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonsoir,
    Si ton fichier est a taille fixe chaque ligne contient le même nombre de caractères.

    Pour intégrer ce type de fichier tu dois connaître obligatoirement la taille de champs ?

    Donc
    1. tu additionnes la taille de tous le champ
    2. Tu multipliés par 2 pour avoir le nombre d'octets par lignes
    3. Tu fais la taille du fichier Modulo nombre octets par ligne ça doit donner zéro si ton fichier est champs taille fixe !

    Maintenant tu peux créer un ficher shema.ini et
    gérer ton importation directement dans Access par requête !

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses, je vais étudier les différentes propositions pour voir ce que je peux en ressortir.

    Je vous ferais un retour dans la semaine.

    ONTAYG

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bon,

    En fait quand on regarde les aides je ne trouve pas les méthodes top de top.

    Malgré mes recherches je vais être obligé d'analyser les premières lignes de mes fichiers (Excel c'est autre chose).

    Je ne comprends pas qu'il y ait des choses plus simples, et peut-être une bibliothèque, mais je n'ai pas trouvé.

    @Thumb down : je veux essayer de me passer d'Access.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    si c'est une longueur fixe, les champs sont forcément complétés par un espace, or l'espace est aussi un délimiteur.
    D'ailleurs quand tu ouvres un fichier csv/txt avec excel et que tu veux traiter les données, il te propose de choisir si les champs sont délimités (et avec quel(s) caractère(s)) ou si les champs ont une taille fixe et on demande de placer un taquet pour délimiter les champ.

    Donc pas d'autres choix de lire au moins 2 lignes pour savoir si longueur fixe, et cette lecture permettra aussi de connaitre l'encodage.

    Et d'après la doc de TexFieldType, ce n'est pas une propriété initiée par la lecture du fichier, mais c'est le programmeur qui la définit pour l'utilisation des autres méthodes de lecture/écriture. https://learn.microsoft.com/fr-fr/do...ltiple-formats

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bon,

    Une réponse sans en être une.

    Pour une raison qui ne dépend pas de moi j'ai basculé l'appli en C# et j'ai résolu le problème en utilisant le Nugest : FileHelpers

    Voilà

    ONTAYG

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    Le package doit aussi fonctionné en VB.NET ...

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Oui, mais je dois basculer en C# cela ne dépend pas de moi.

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bon,

    J'ai réussi à les persuader que l'effet final serait le même entre C# et Vb.net

    Avec la bibliothèque FileHelper cela donne

    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
    Public Function FichierTexte(strFichier As String) As String
            ' Va lancer l'analyse du fichier texte utilisation de la bibliotheque file helper
     
            Dim detector = New FileHelpers.Detection.SmartFormatDetector
            Dim formats = detector.DetectFileFormat(strFichier)
            Dim format
     
            For Each format In formats
                Dim delimited = formats(0).ClassBuilderAsDelimited
                If delimited Is Nothing Then
                    FichierTexte = ""
                Else
                    FichierTexte = delimited.Delimiter
                End If
            Next
        End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connaitre le type d'un fichier
    Par Syarko dans le forum Général Java
    Réponses: 3
    Dernier message: 13/11/2015, 13h34
  2. [Débutant] Comment connaitre le type d'encodage des fichiers textes ?
    Par saxrub dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/03/2012, 11h26
  3. connaitre le type d'un fichier sans extension
    Par Atasuke dans le forum C
    Réponses: 5
    Dernier message: 07/11/2011, 16h56
  4. Connaitre le type d'un fichier sans son extension
    Par ionone dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 15/07/2009, 14h19
  5. Connaitre le type d'un fichier.
    Par youp_db dans le forum C
    Réponses: 4
    Dernier message: 18/07/2006, 18h39

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