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

Lazarus Pascal Discussion :

Problème avec blockwrite [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 332
    Par défaut Problème avec blockwrite
    Bonjour à tous j'ai un souci avec blockwrite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var newtext:string;
    begin
       AssignFile(F, 'monfichier.txt');
           FileMode:=2;
          Reset(F, 1);
     
           Seek(F, FileSize(F));
                  newtext:='mon texte à ajouter';
          BlockWrite (F,'mon texte à ajouter',19);
            closeFile(F);
    end;
    Là mon texte est bien ajouter mais si j'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BlockWrite (F,nextext,newtext.Length);
    le nouveau texte n'est pas enregistré.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    J'imagine que nextext au lieu de newtext est un lapsus scriptae uniquement sur le forum ?
    Sinon, si le code n'est pas un exemple, pourquoi ne pas utiliser Append(newtext) ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 332
    Par défaut
    Bonjour
    oui nextext est une erreur de frappe.
    Je n'utilise pas append car le de nouveau texte ne sera pas forcément ajouter à la fin.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonsoir,

    Pour un fichier texte, pourquoi ne pas utiliser un TStringList et ses méthodes LoadFromFile et SaveToFile ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 332
    Par défaut
    bonsoir
    oui je peux utiliser un stringlist mais je voudrai bien savoir pourquoi le blockwrite ne marche pas

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Il faut l'écrire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      s: string;
     
    begin
      { ... }
      BlockWrite(F, s[1], 19);
    Ou comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      s: string;
     
    begin
      { ... }
      BlockWrite(F, pchar(s)^, 19);

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 224
    Par défaut
    Hello,
    Citation Envoyé par sematimo Voir le message
    Bonjour à tous j'ai un souci avec blockwrite.
    Là mon texte est bien ajouter mais si j'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BlockWrite (F,nextext,newtext.Length);
    .
    Quand tu dis que tu utilises un code met nous exactement ce que tu utilises parce que le code que tu as mis ne risque pas de marcher :
    nextext n'est pas défini et newtext.Length n'existe pas et provoque une erreur à la compilation : il faut mettre Length(newtext)
    en plus il n'y a pas 19 mais 20 caractères dans la chaîne.
    Comme l'indique Roland, il faut mettre newtext[1] et pas newtext dans l'appel du BlocWrite et pourquoi ? :
    Blockwrite n'attend pas une chaine mais un Const pour ce paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure BlockWrite(
    var f: file;
    const Buf;
    Count: Int64;
    var Result: Int64
    );
    avec une chaîne constante cela fonctionne mais avec une string cela ne marche pas on transmet l'adresse de la variable, avec newtext[1] on transmet l'adresse du contenu de la variable ( dites moi si je dis une bêtise )

    Ami calmant, J.P

  8. #8
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 332
    Par défaut
    Merci à vous 2 pour vos explications.

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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