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

Macros et VBA Excel Discussion :

Identifier le format d'un fichier texte (UNIX ou DOS) [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 28
    Par défaut Identifier le format d'un fichier texte (UNIX ou DOS)
    Bonjour à tous,

    Mon objectif est de réaliser une maccro permettant de lire des output de fichiers d'un programme de calcul et de les écrire sur une page Excel.
    Or certain de ces fichiers sont issus d'un environnement Unix ainsi je dois d'abord convertir les fichier pour pouvoir les lire sur Windows.
    Pour cela j'utilise le code suivant qui permet de remplacer les retour à la ligne VbLf (UNIX) en VbCrLf (DOS) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Open sRepertoire & sNomFichier For Binary As #iFile
                FileLength = LOF(iFile)
                strTemp = String(FileLength, Chr(0))
                Get #iFile, 1, strTemp
                strTemp = Replace(strTemp, vbLf, vbCrLf)
                Put #iFile, 1, strTemp
            Close #iFile
    Mon problème est que si le fichier est déjà au format DOS la maccro va rajouter des sauts de lignes supplémentaire, je cherche donc à effectuer cette conversion UNIQUEMENT pour les fichiers au format UNIX.

    J'ai essayé la solution suivante pour identifier le format de mon fichier en lisant celui-ci ligne par ligne afin de vérifier si celle-ci contient un saut de ligne de type 'vbCrLf'. Même pour un fichier au format DOS , la variable "DOS" reste toujours à 0.

    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
     
        'Déclaration variables
        Dim i As Long
        Dim sRepertoire As String, sNomFichier As String
        Dim iFile As Integer
        Dim strTemp As String
        Dim FileLength As Long
        Dim buffer As String
        Dim DOS As Integer
     
     
        'Recherche du chemin vers le fichier dans l'onglet input
        sRepertoire = Range("S1_FP").Value
        sNomFichier = Range("S1_FN").Value
        DOS = 0
     
        'Checking if the file is already in DOS format
        iFile = FreeFile
        Open sRepertoire & sNomFichier For Input As #iFile
        Do Until EOF(iFile)
             Line Input #iFile, data
            If InStr(data, vbCrLf) <> 0 Then
                 DOS = 1
            End If
        Loop
        MsgBox (DOS)
        Close #iFile
     
     
     
        'UNIX file format to DOS:
        If DOS = 0 Then
            Open sRepertoire & sNomFichier For Binary As #iFile
                FileLength = LOF(iFile)
                strTemp = String(FileLength, Chr(0))
                Get #iFile, 1, strTemp
                strTemp = Replace(strTemp, vbLf, vbCrLf)
                Put #iFile, 1, strTemp
            Close #iFile
        End If
    Pourriez vous m'indiquer mes erreurs ou une méthode me permettant de conditionner cette conversion.
    En espérant avoir été clair dans l'explication de mon problème, je vous remercie par avance de votre aide.

    Cordialement,

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    inutile de réécrire le fichier source ! Il suffit de lire directement l'intégralité du fichier dans une variable texte par exemple
    puis d'utiliser la fonction Split pour séparer les lignes dans une variable tableau (ici SPQ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                                   F% = FreeFile
        Open FICHIER For Input As #F
        SPQ = Split(Input(LOF(F), #F), vbLf)
                            Close #F
    Et avec deux sous de jugeote peut être réalisée une lecture universelle de
    fichier texte quelle que soit la séquence de fin de ligne via la fonction texte Replace !

    Sans compter les bibliothèques comme FileSystemObject et ADODB.Stream entre autres …

    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par dude91820 Voir le message
    Bonjour à tous,

    Mon objectif est de réaliser une maccro permettant de lire des output de fichiers d'un programme de calcul et de les écrire sur une page Excel.
    Or certain de ces fichiers sont issus d'un environnement Unix ainsi je dois d'abord convertir les fichier pour pouvoir les lire sur Windows.
    Pour cela j'utilise le code suivant qui permet de remplacer les retour à la ligne VbLf (UNIX) en VbCrLf (DOS) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Open sRepertoire & sNomFichier For Binary As #iFile
                FileLength = LOF(iFile)
                strTemp = String(FileLength, Chr(0))
                Get #iFile, 1, strTemp
                strTemp = Replace(strTemp, vbLf, vbCrLf)
                Put #iFile, 1, strTemp
            Close #iFile
    Peut-être remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strTemp = Replace(strTemp, vbLf, vbCrLf)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    b = InStr(strTemp, vbCrLf)
    If b = 0 Then
     strTemp = Replace(strTemp, vbLf, vbCrLf)
    End If

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 28
    Par défaut
    Merci pour vos réponses ça fonctionne niquel !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/12/2009, 16h32
  2. [XL-2007] Format javascript dans fichier texte via urldownloadtofile VBA
    Par patbo2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2009, 12h44
  3. Identifier des lignes d'un fichier texte à des varaibles
    Par lohot dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 27/02/2008, 18h39
  4. Comment identifier le format d'un fichier ?
    Par ultracoxy dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/07/2006, 11h03
  5. Conversion d'un fichier texte unix -> dos
    Par lejert dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/11/2005, 15h59

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