none
LINE INPUT (longueur d'enregistrement avec caractères [NUL]) RRS feed

  • Question

  • Bonjour

    VBA

    J'ai des fichiers .TXT avec des dessins d'enregistrement fixes (= ils ont tous la même longueur).

    Je ne suis pas sensé connaître cette longueur et je dois calculer le nombre d'enregistrements.

    Pour cela j'utilise LINE INPUT,  LEN et LOF
    Je lis le 1er enregistrement (délimité pat CR et LF) : LINE INPUT
    Je divise la longueur du fichier par la longueur du 1er enregistrement + 2 (CR et LF) : LOF / (LEN + 2)

    Cela fonctionne à merveille : il n'y a pas un octet de différence.

    Mais on ne choisit pas ses clients et nous venons de remarquer que certains fichiers .TXT ne l'étaient pas tout à fait : Notepad+ nous montre par exemple des [NUL] et autres caractères exotiques. (mais chaque enregistrement a la même longueur)

    + Et à la lecture LINE INPUT, la longueur LEN n'est pas bonne. (inférieure à celle prévue), et donc le nombre d'enregistrements non plus :-(

    Je suis à la recherche d'une solution (même avec API)  J'ai déjà essayé ceci :

    - Lire les enregistrements les uns après les autres et les compter : pas le bon compte, et de très très loin
    - Utiliser FSO  READALL et faire un SPLIT sur VbCrLf, pas mieux.

    Cdt,
    Blaise

    «
    Écrire son problème sur un papier et le jeter à la poubelle permet de mieux dormir.
    La nuit porte conseil, je verrais cela demain.
    »

    mercredi 3 novembre 2010 17:31

Réponses

  • bonjour Blaise,

    Sub DerniereLignes()
    Dim ff As Integer, Lignes() As String, Temp As String
    ff = FreeFile
    Open "C:\MonFichier.txt" For Binary As #ff
    Temp = String(FileLen("C:\MonFichier.txt"), " ")
    Get #ff, , Temp ' Récupère tout le fichier
    Close #ff
    Lignes = Split(Temp, vbCrLf)
    MsgBox UBound(Lignes)
    End Sub

    isabelle

    Le 2010-11-03 13:31, blaise032 a écrit :

    Bonjour

    VBA

    J'ai des fichiers .TXT avec des dessins d'enregistrement fixes (= ils ont tous la même longueur).

    Je ne suis pas sensé connaître cette longueur et je dois calculer le nombre d'enregistrements.

    Pour cela j'utilise LINE INPUT,  LEN et LOF
    Je lis le 1er enregistrement (délimité pat CR et LF) : LINE INPUT
    Je divise la longueur du fichier par la longueur du 1er enregistrement + 2 (CR et LF) : LOF / (LEN + 2)

    Cela fonctionne à merveille : il n'y a pas un octet de différence.

    Mais on ne choisit pas ses clients et nous venons de remarquer que certains fichiers .TXT ne l'étaient pas tout à fait : Notepad+ nous montre par exemple des [NUL] et autres caractères exotiques. (mais chaque enregistrement a la même longueur)

    + Et à la lecture LINE INPUT, la longueur LEN n'est pas bonne. (inférieure à celle prévue), et donc le nombre d'enregistrements non plus :-(

    Je suis à la recherche d'une solution (même avec API)  J'ai déjà essayé ceci :

    - Lire les enregistrements les uns après les autres et les compter : pas le bon compte, et de très très loin
    - Utiliser FSO  READALL et faire un SPLIT sur VbCrLf, pas mieux.

    Cdt,
    Blaise

    «
    Écrire son problème sur un papier et le jeter à la poubelle permet de mieux dormir.
    La nuit porte conseil, je verrais cela demain.
    »

    • Marqué comme réponse blaise032 jeudi 4 novembre 2010 08:21
    mercredi 3 novembre 2010 19:16

Toutes les réponses

  • bonjour Blaise,

    Sub DerniereLignes()
    Dim ff As Integer, Lignes() As String, Temp As String
    ff = FreeFile
    Open "C:\MonFichier.txt" For Binary As #ff
    Temp = String(FileLen("C:\MonFichier.txt"), " ")
    Get #ff, , Temp ' Récupère tout le fichier
    Close #ff
    Lignes = Split(Temp, vbCrLf)
    MsgBox UBound(Lignes)
    End Sub

    isabelle

    Le 2010-11-03 13:31, blaise032 a écrit :

    Bonjour

    VBA

    J'ai des fichiers .TXT avec des dessins d'enregistrement fixes (= ils ont tous la même longueur).

    Je ne suis pas sensé connaître cette longueur et je dois calculer le nombre d'enregistrements.

    Pour cela j'utilise LINE INPUT,  LEN et LOF
    Je lis le 1er enregistrement (délimité pat CR et LF) : LINE INPUT
    Je divise la longueur du fichier par la longueur du 1er enregistrement + 2 (CR et LF) : LOF / (LEN + 2)

    Cela fonctionne à merveille : il n'y a pas un octet de différence.

    Mais on ne choisit pas ses clients et nous venons de remarquer que certains fichiers .TXT ne l'étaient pas tout à fait : Notepad+ nous montre par exemple des [NUL] et autres caractères exotiques. (mais chaque enregistrement a la même longueur)

    + Et à la lecture LINE INPUT, la longueur LEN n'est pas bonne. (inférieure à celle prévue), et donc le nombre d'enregistrements non plus :-(

    Je suis à la recherche d'une solution (même avec API)  J'ai déjà essayé ceci :

    - Lire les enregistrements les uns après les autres et les compter : pas le bon compte, et de très très loin
    - Utiliser FSO  READALL et faire un SPLIT sur VbCrLf, pas mieux.

    Cdt,
    Blaise

    «
    Écrire son problème sur un papier et le jeter à la poubelle permet de mieux dormir.
    La nuit porte conseil, je verrais cela demain.
    »

    • Marqué comme réponse blaise032 jeudi 4 novembre 2010 08:21
    mercredi 3 novembre 2010 19:16
  • Impeccable Isabelle,

    Merci,

    Blaise

    jeudi 4 novembre 2010 08:21