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 :

[TFileStream] Problème de lecture de string


Sujet :

Langage Delphi

  1. #1
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut [TFileStream] Problème de lecture de string
    Salut

    Suivant les conseils avisés des nombreux posts que j'ai pu lire, je me suis mis aux streams...
    Et, c'est donc en toute logique, que j'ouvre maintenant mes fichiers avec un TFileStream... 8)

    Seulement voila, j'ai un problème avec les strings (les chaines de caractères )...
    En écriture, grâce à F1, j'ai trouvé une aide pour écrire une string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      t.Write(PChar(s)^,length(s));
    Ca, ok, ça marche...
    Par contre, impossible de lire...
    J'essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var s:string;
    begin
        t.Read(t,Longueur);
    end;
    Et, evidemment, une exception m'envoie allègrement ballader...

    J'arrive à lire en utilisant des array of char (avec des SetLength partout) mais après j'ai des problèmes pour convertir ces array en string...

    Quelqu'un peut-il m'aider?

    Merci d'avance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  2. #2
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Salut,

    Tu peux aussi utliser l'index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    pour écrire:
      t.Write(s[1],length(s)); 
     
    ..
    pour lire :
      SetLength(s, Longueur);
      t.Read(s[1], Longueur);
    A+
    On ne me la fait pas à moi !

  3. #3
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Moi j'ai créé pour ça une méthode d'écriture et une de lecture qui écrit/lit une string au format AZT (À Zéro Terminal).
    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
    function ReadStrFromStream(Stream : TStream) : string;
    var C : Char;
    begin
      Result := '';
      repeat
        Stream.Read(C, 1);
        if C <> #0 then Result := Result+C;
      until C = #0;
    end;
     
    procedure WriteStrToStream(Stream : TStream; Str : string);
    var I : integer;
        C : Char;
    begin
      for I := 1 to Length(Str) do
      begin
        C := Str[I];
        Stream.Write(C, 1);
      end;
      C := #0;
      Stream.Write(C, 1);
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Salut,

    Pour cela il faut qu'il y ait toujours un caractère #0 à la fin de la chaine.

    A+
    On ne me la fait pas à moi !

  5. #5
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Ben non, c'est pour parer ce problème qu'il y a ceci à la fin de WriteStrToStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C := #0;
    Stream.Write(C, 1);
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Membre régulier Avatar de fs999
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 111
    Points
    111
    Par défaut
    Salut,

    C'est bien ce que je dis...

    C'est pas sûr qu'il veuille lire ses propres fichiers uniquement, comme c'est pas sûr qu'il veuille lire toute la chaîne (c'est pour ça : Longueur)...

    A+
    On ne me la fait pas à moi !

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par fs999
    Salut,
    C'est pas sûr qu'il veuille lire ses propres fichiers uniquement, comme c'est pas sûr qu'il veuille lire toute la chaîne (c'est pour ça : Longueur)...
    Non effectivement... Le longueur est une valeur integer juste avant la chaîne de caracactères qui représente la longueur de la chaîne qui suit dans le fichier... C'est pas top... Surtout qu'effectivement, je lis systématiquement les chaines entierièrement...
    Mais ta méthode avec #0 à la fin est interessante, je n'y avais pas pensé!!
    Donc je vais essayer avec ta méthode et celle de sjrd réunies!!

    Merci à vous deux!
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

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

Discussions similaires

  1. Grave problème de lecture de tableau string
    Par a_lincoln54 dans le forum C++
    Réponses: 3
    Dernier message: 02/06/2008, 16h55
  2. [débutant] problème de lecture d'image
    Par shura dans le forum OpenGL
    Réponses: 16
    Dernier message: 03/07/2004, 18h05
  3. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 14h06
  4. [fread] Problème de lecture de buffer
    Par karl3i dans le forum C
    Réponses: 2
    Dernier message: 25/09/2003, 09h21
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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