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

Langage Delphi Discussion :

[Gestion de fichiers] ReadLN et caractère #0


Sujet :

Langage Delphi

  1. #1
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut [Gestion de fichiers] ReadLN et caractère #0
    Bonsoir,

    Quelqu'un pourrait m'expliquer pourquoi j'ai un caractère #0 lorsque je lit la seule ligne de mon fichier de type texte ?

    Structure du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Procedure trucmachinchouette;
    var
      url     : string;
      fMAJ    : TextFile;
    begin
      if (fileexists('c:\toto.txt')) then
      begin
         AssignFile(fMAJ,'c:\toto.txt');
         Reset(fMAJ);
         ReadLN(fMAJ,url);
         showMessage(url); //Ne m'affiche rien car url = #0'http://.....'
         closeFile(fMAJ);
      end;
    end;
    En fait le caractère #0 semble être interprété comme une fin de ligne, du coup le reste n'est pas traité ! Et aucun "StringReplace" n'arrive à y remédier...

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par windmastr26 Voir le message
    Bonsoir,

    Quelqu'un pourrait m'expliquer pourquoi j'ai un caractère #0 lorsque je lit la seule ligne de mon fichier de type texte ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Procedure trucmachinchouette;
    var
      url     : string;
      fMAJ    : TextFile;
    begin
      if (fileexists('c:\toto.txt')) then
      begin
         AssignFile(fMAJ,'c:\toto.txt');
         Reset(fMAJ);
         ReadLN(fMAJ,url);
         showMessage(url); //Ne m'affiche rien car url = #0'http://.....'
         closeFile(fMAJ);
      end;
    end;
    En fait le caractère #0 semble être interprété comme une fin de ligne, du coup le reste n'est pas traité ! Et aucun "StringReplace" n'arrive à y remédier...
    le #0 est traité par Windows comme la fin de chaîne (PChar)

    mais d'après ton code il doit être présent dans ton fichier texte...à moins que ce ne soit un fichier UNICODE et que ta version de Delphi ne le gère pas. Dans ce cas c'est une WideString avec #0'h'#0't'#0't'#0'p'....
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    Bonjour,

    En fait il s'agit d'un simple fichier texte créé sous notepad et sans inscrire de caractère nul #0. Le fichier a ensuite été envoyé sur un site web (via ftp) pour être téléchargé par mon appli delphi via un composant Indy idHTTP (méthode get).

    J'utilise ensuite la procédure citée dans mon précédent post pour lire le fichier, et le readln me renvoi alors :

    Cela viendrait-il du composant Indy ? J'ai suivi le tuto de la rubrique delphi pour l'utiliser...

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    j'imagine que ce n'est pas idHTTP qui enregistre le fichier sur disque, il peut y avoir une erreur entre deux
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    C'est ce que je me dis aussi, mais il n'y a pas grand chose entre les deux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    chemin:='c:\download.txt';
    url:='http://www.monsite.fr/support/download/maj.txt';
    fichier := TFileStream.Create(chemin,fmCreate);
    try
      idHTTP.Get(url,fichier);
    except
      on e:Exception do
        lbResult.Caption:='Erreur lors de la récupération des mises à jour...';
    end;
    fichier.Free;
    Peut être un paramétrage d'Indy à faire ? Mais je n'ai rien vu de ce coté là...

  6. #6
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    Non ça ne vient pas d'Indy mais bel et bien de la fonction "readLN".

    Je viens de créer un fichier tout simple avec notepad :

    Je l'ai enregistré sous C et en format ANSI : il me génère le même problème...

  7. #7
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    Je viens de "résoudre" mon problème, même si je ne l'explique pas encore totalement...

    En fait plus loin dans mon script, j'analysais ma chaine contenant la ligne de mon fichier afin de créer un tableau de 3 éléments.

    J'ai donc utilisé un truc du style (version simplifiée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=0 to length(chaine) tab[0]:=chaine[i];
    J'ai remplacé "chaine[i]" par "copy(chaine,i,1)" et ça semble fonctionner.

    Pourquoi l'accès à ma chaine par l'intermédiaire de sa position me rajoutait un caractère null #0 en début de chaine ? Je ne sais pas du tout... Alors si quelqu'un sait, histoire de ne pas mourir plus idiot que je ne le suis, je suis preneur

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    lol

    parce que la chaine commence à l'indice 1 et non 0
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    Bon bin je peux finalement me sentir encore plus idiot ! lol

    Désolé pour l'erreur si évidente et merci à toi

  10. #10
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Pour parcourir une string c'est de 1 à Length(Chaine)
    chaine[i], pour i=0 renverra toujours 0. (D'ailleurs Chaine[0] ne compile pas)

    Edit: Grillé, trop de temps à répondre

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

Discussions similaires

  1. Gestion de fichier
    Par Zenol dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2005, 15h44
  2. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h52
  3. Fonctions de gestion de fichiers
    Par sebduth dans le forum Fortran
    Réponses: 4
    Dernier message: 22/08/2005, 10h38
  4. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 13h42
  5. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16

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