Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Mut
    Mut est déconnecté
    Membre confirmé Avatar de Mut
    Homme Profil pro
    Inscrit en
    mars 2003
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : mars 2003
    Messages : 918
    Points : 276
    Points
    276

    Par défaut Lire un fichier renommé en .txt

    Bonjour,

    Je souhaiterais lire un fichier renommé en .txt.

    Une partie du fichier est lisible et je souhaite y récupérer certaines valeurs mais lorsque je lis le fichier avec la méthode :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Input_file = "c:\test.txt"
    Open Input_file For Input As ifile 
    Do While Not EOF(ifile)
     
    Line Input #1, Laligne
     
    Loop
     
    Close #1
    Mais cela bloque à la première ligne certainement du à un problème de lecture de l'encodage...

    Si quelqu'un peut m'éclairer...

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 505
    Points : 6 404
    Points
    6 404

    Par défaut

    Salut

    Tu ouvres le fichier avec une variable ifile désignant le port disponible pour la lecture du fichier, puis tu utilises un port N°1 (ligne 7 dans ton code).
    Rien ne dit que ifile a pourvaleur 1.
    Code :
    1
    2
    3
    4
    5
    6
    7
    Input_file = "c:\test.txt"
    ifile = FreeFile
    Open Input_file For Input As ifile
    Do While Not EOF(ifile)
        Line Input #ifile, Laligne
    Loop
    Close #ifile

  3. #3
    Mut
    Mut est déconnecté
    Membre confirmé Avatar de Mut
    Homme Profil pro
    Inscrit en
    mars 2003
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : mars 2003
    Messages : 918
    Points : 276
    Points
    276

    Par défaut

    Autant pour moi...j'ai oublié de mettre les variables dans le code

    Code :
    1
    2
     
    Dim Laligne As Integer
    En fait le code semble fonctionner car j'ai bien une valeur retournée qui correspond au début du fichier mais j'ai l'impression qu'il n'apprécie pas certains caractères dans le fichier et donc qu'il s'arrete...je ne trouve pas le moyen de lui faire lire ces caractères :\

    Edit : Non en fait je viens de voir en détail ce que tu dis dans le post et je suis moins sûr de mon code...visiblement cela pourrait interrompre la boucle ?

  4. #4
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 505
    Points : 6 404
    Points
    6 404

    Par défaut

    Il faut donc ouvrir le fichier en mode Binary.
    Pour plus d'informations regarder dans MSDN rubrique Input, fonction et Input #, instruction.

  5. #5
    Mut
    Mut est déconnecté
    Membre confirmé Avatar de Mut
    Homme Profil pro
    Inscrit en
    mars 2003
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : mars 2003
    Messages : 918
    Points : 276
    Points
    276

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Dim Input_file String
    Dim Laligne
    ifile = FreeFile
     
     
    Input_file = "c:\test.txt"
    Open Input_file For Input As ifile 'For Input As ifile 'input file nom du fichier
    Do While Not EOF(ifile)
    MsgBox ifile
     
    Line Input #ifile, Laligne
     
     
    Loop
     
     
    Close #ifile
     
    End Sub
    Avec ce code j'ai toujours le meme probleme...

    Le fichier txt commence par ça
    Creation Date: 1/12/2012 13:06:49  ÞÒ|ûã@ ÞÒ|ûã@    … Ö& ª; 9 ©9 .; 8; Æ& \=    $ Liaison
    Et un mgsbox sur la ligne donne uniquement
    Creation Date: 1/12/2012 13:06:49
    au lieu de
    Creation Date: 1/12/2012 13:06:49  ÞÒ|ûã@ ÞÒ|ûã@    … Ö& ª; 9 ©9 .; 8; Æ& \=    $ Liaison

  6. #6
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 505
    Points : 6 404
    Points
    6 404

    Par défaut

    Salut
    Comme je l'écrivais dans mon dernier post, il faut ouvrir en mode Binary
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Command1_Click()
    Dim Input_file As String, Laligne As String, StrFichier As String
    Dim ifile As Integer
     
    ifile = FreeFile
     
    Input_file = "c:\test.txt"
    Open Input_file For Binary As ifile
    Do While Not EOF(ifile)
        Input #ifile, Laligne
        StrFichier = StrFichier & Laligne & vbCrLf
    Loop
    Close #ifile
    'MsgBox StrFichier
    Text1.Text = StrFichier
    End Sub
    Pour l'exemple, test.txt contient 2 lignes.

  7. #7
    Membre expérimenté
    Inscrit en
    décembre 2007
    Messages
    471
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 471
    Points : 564
    Points
    564

    Par défaut

    Bonjour,

    A ProgElect,
    ton code proposé peut provoquer l'erreur d'exécution 62:
    "L"entrée dépasse la fin de fichier"
    (je l"ai eue en test sur un fichier texte)
    alors je proposerai une petite modification à ton code

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Private Sub Command1_Click()
     
    Dim Input_file As String, Laligne As String, StrFichier As String
    Dim ifile As Integer
    Dim noctet As String
     
    ifile = FreeFile
    Input_file = "c:\test.txt"
    noctet = FileLen(Input_file)           'nombre d'octets du fichier
     
    Open Input_file For Binary As ifile
    StrFichier = String(noctet, " ")
    Get #ifile, 1, StrFichier                 'lecture à partir du 1er octet jusque la fin           
    Close #ifile
    'MsgBox StrFichier
    Text1.Text = StrFichier
    End Sub

  8. #8
    Modérateur

    Homme Profil pro Hervé
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Nom : Homme Hervé
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 4 024
    Points
    4 024

    Par défaut

    Bonjour,

    Si ton fichier n'est pas trop volumineux , tu peux le lire d'un bloc.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Function LitFichier(sNomFic As String) As String
    Dim Contenu As String
    Dim FileNum As Integer
     
    Contenu = ""
    FileNum = FreeFile          'Numéro pour ouverture du fichier
    If Dir(sNomFic) <> "" Then             'Ne traite que si le fichier existe
        Contenu = Space(FileLen(sNomFic))  'dimmensionne la variable à la taille du fichier
        Open sNomFic For Binary As FileNum 'ouvre le fichier
        Get FileNum, , Contenu             'réccupère tout le contenu du fichier
        Close FileNum                      'ferme le fichier
    End If
    LitFichier = Contenu
    End Function
     
    Private Sub Command1_Click()
    MsgBox (LitFichier("D:\data\txt & bin.txt")) ' test avec caractère bizarre ok
    End Sub
    Après tu fait un split sur le saut de ligne et tu peux traiter chaque ligne à ta guise.

    A+, Hervé.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •