Passer d'un String à un dynamic Array et inversement

Résolu
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 25 juin 2008 à 22:16
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 27 juin 2008 à 17:15
Bonsoir,

J'ai remarqué que pour qu'une donnée s'écrive correctement dans un fichier avec BlockWrite, il fallait un array of  char (par exemple).

Mais j'ai un soucis, je veux sauvegarder le contenu d'un TRichEdit dans un fichier binaire suivant la structure que j'ai décidé pour ce format, il me faut donc passer du String vers un Array of Char.

Comment faire cela ?

Merci d'avance.

P.S.: Ne connaissant pas à l'avance la taille pour le array of char, je le définit en dynamic, donc il apparait comme un dynamic of char.

44 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
26 juin 2008 à 15:01
tout ce qui n'est point vers est prose et inversement..

cantador
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
26 juin 2008 à 15:31
Je ne vois pas pourquoi tu te ferais bannir...
Mais si tu le proposes, c'est bien que tu as quelque chose à te reprocher... par exemple d'être insolent...

Le problème, c'est que ta question n'est pas précise, que tu rejettes les premières propositions de Cirec froidement, que tu accuses Jlen de ne rien s'y connaître alors que tout ce qu'il a dit est juste, et que enfin tu en profites pour traiter tout le monde de "con" sous prétexte que ton frère à un niveau bac+5.
Je ne sais pas si tu le remarques, mais c'est toi qui te crée des problèmes. Ici on est là pour aider. La preuve: on répond à ta question, on cite de la documentation, c'est pas pour des prunes tout de même, non ?

Maintenant tu peux nous traiter de cons, d'ignorants, de tout ce que tu veux, cela ne manifeste de ta part que ta faiblesse.
En effet, les gens civilisés opposent à un argument un autre argument.

Pour revenir au problème posé initialement, je te signale qu'en principe, quand quelqu'un propose quelque chose, on ne répond pas "ah mais ça je sais pas faire...j'ai jamais réussi à m'en servir". On essaye et on revient après.
Toi tu es du genre imperméable à toute nouveauté. C'est pas comme ça qu'on avance. Demande à des pros justement.

Sinon, pour clore une fois pour toute le débat, d'après ton avant-dernier paragraphe, je vois que nous avons bien la même définition du terme "fichier binaire". Alors inutile d'en faire un foin.
Et concernant la citation de Wiki que j'ai reprise, c'était pour montrer le flou total de leur formulation. Wiki c'est bien mais pas trop. Là c'est carrément incompréhensible pour quelqu'un qui ne sait pas la vraie définition, donc c'est trompeur: on n'appelle ça du sophisme.

Voila voila.
C'est quand même pas si compliqué de ne pas se crier dessus...... enfin j'espère.
0
Utilisateur anonyme
26 juin 2008 à 16:34
Mon cher Christophe :

*Ton frère a un bac +5 : Depuis quand culture = intélligence mon garcon .
Puis tu sais avoir un bac +5 ca n'a rien d'extraordinaire . Il y a plein de gens qui ont ce niveau d'études. Puis tu sais des gens qui ont un Bac+5 et qui dans la pratique sont des quiches dans leur métier, j'en ai rencontré un paquet .

*Par rapport à toi :

1)Tu es tellement tétu, tellement fermé d'esprit et tellement enfermé dans ta bulle que tu n'arrives meme à faire la distinction entre nos points de divergences et nos points d'accords.

Ca fait 3 pages que l'on se tue à te dire qu'un fichier binaire n'est pas un fichier texte. Cependant si tu avais un semblant d'intélligence, tu aurais fais un test : Déclare une variable string et assigne lui une valeur. Compile et regarde dans NotePad : tu la véras ta chaine de caractère. Tout ca pour rejoindre les mots de Florenth.

Secondement :

*JLen a dit "Ainsi en utilisant un SaveToFile ou les méthode de cirec tu obtiendras trés exactement la même chose que tu le nommes 'monfichier.txt' ou 'monfichier.bin' le programme se 'fout' comme sa première couche du nom de l'extension qui n'est après tout qu'une convention et même si tu l'appelais 'tarte a la creme.ttc' son contenu serait identique".

*Toi : Tu as pas compris ce qu'est le SaveToFile, cela permet de sauvegarder dans un fichier texte, donc lisible par le commun des mortels.

Tu n'as rien compris à ce que JLen a dit : Prend un ton TRichEdit. Fait un SaveToFile('blabla.bin') ou SaveToFile('Blabla.txt') et ouvre les deux fichiers avec NotePad et tu comprendra que " tu obtiendras trés exactement la même chose". C'est pas ton SaveToFile qui change ou crée  la structure d'un fichier : voila la signification des mots de JLen.

Maintenant dans la mesure ou tu n'ajoutes que des Chaines de Caractères, l'ensembles des méthodes fonctionneront. Pas besoin de se prendre la tête.

Quatrièmement : On te donne une méthode propre qui consiste à utiliser les Flux. Tu t'en tête à utiliser une méthode obsolète et pourri que sont les blocs.

Cinquièmement : Si tu cherches à faire un éditeur RTF faire de la bidouille avec ton RichEdit n'est pas vraiment la bonne méthode.

Sixièmement : C'est toi qui a dit que l'on ne peut pas ouvrir un fichier binaire avec NotePad. Que les caracètres n'est aucune signification c'est autre chose : faut pas tout confondre jeune homme. Quand on veut joué au pro on utilise le langage qui va avec. 

Pour finir : Que tu te fasses bannes pour ta bètise c'est pas le genre de la maison : apres tout c'est toi qui est ridicule. Par contre pas besoin de t'inscrire en victime : tu es un ptit con insolent et irrespectueux et ca ca pourrait de valoir un ban sans la moindre hésitation. Alors le snif snif vous etes tous des gros salops, ben ta comédie tu peux la faire ailleurs : ca prend pas ici . Quand à Nix il a autre chose à faire  que de corriger un gamin.

Nous on est peut etre pas des pros, mais on a dépassé le stade de polluer un forum pour arriver à faire des choses aussi infantines.

Merci d'aller voir ton frère dorénavant quand tu auras besoin d'aide plutot que de tourner vers lui.

Il t'apprendra tous les secrets des blocs et leur hauts combien optimisation
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 juin 2008 à 18:52
Nous sommes peut être tous des "cons", des ignorants certainement (on a au moins l'avantage de le savoir).
maintenant faut-il te rappeler qu'un ordinateur ne traite que du binaire que tous les fichiers sont par définition des fchiers binaires et que les fichiers texte n'en sont qu'une restriction, que si les caractères imprimables n'ont été défini que par convention et qu'ils font malgré tout partie de l'ensemble des char.
Maintenant commence par réviser tes bases avant de nous sortir tes théories fais des tests, soit curieux c'est le début de la sagesse. Les échecs nous apprennent bien plus que les réussites.

Ps si tu veux faire "péter" les galons sache que j'ai un doctorat en physique mais que malgré cela je suis loin de tout connaitre.Restons Humble que diable; on finit toujours par trouver plus savant que soi. La connaissance est une chose toute relative. Le  savoir ne fait pas l'intelligence.........

Jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 juin 2008 à 18:58
et depuis quand on ne peut pas mettre autre chose que des caractères imprimables dans un string??? c'est nouveau cela vient de sortir?
je vois que ton ignorance est insondable.

Jlen
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
26 juin 2008 à 19:00
"Au début il a parler des Streams, donc totalement HS vu que ma demande porte sur BlockRead et BlockWrite"
> mon pauvre c'est toi qui est HS ! Un stream un accès sur un fichier. C'est 10 fois mieux que ton truc qui date du Pascal.

"j'ai mes raisons"
=> Lesquelles ? ***(à part compatibilité car ça c'est une fausse-bonne raison)

"SaveToFile, je me borne à dire que ça, cela me permet un enregistrement dans un fichier texte mais pas pour un binaire"
=> Certes, mais SaveToStream lui par contr le permet. On t'en a pas parlé car ta question était trop floue et que t'avais l'air d'un débutant qui a peur des flux (ce qui a l'air d'être toujours le cas)

"Alors bon, ben puisque apparemment ont est mal reçus quand on demande
de l'aide sur un sujet alors qu'il y a d'autres manières de faire
(utilisation des Streams dans mon cas), ben je m'abstiendrait de
demander de l'aide."
=> Petite correction: on est mal reçu quand on est fainéant. C'est entièrement autre chose.

"Vu que apparemment pour vous c'est : "Tu fais ce que je dis et tu fermes ta geule""
=> C'est plutôt, "tu essayes ce que je te suggère et tu m'en dis des nouvelles", ce qui implique de ne pas répondre "nan mais ça je connais pas, moi je VEUX comme ça" (à noter que le verbe vouloir est très très déconseillé ici comme partourt d'ailleurs)

"vous bafouez les droits de l'home"
=> Non. Par contre, toi tu bafouilles.

*** : en fait, je veux pas savoir la réponse, je n'ai pas spécialement de temps à perdre à lire tes arguments que je sais d'avance pas convainquants.http://www.mx-dev.net
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 juin 2008 à 19:08
maintenant si tu veux voir comment on manipule du binaire dans un string va voir lien
cela t'éviteras de dire des anneries
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
26 juin 2008 à 19:09
"Un fichier texte, rien n'est caché, c'est pas le cas d'un binaire où des informations apparaissent pas en clair."


oublis ce que tu pense croire comme etant vrai.

on peu cacher aussi bien des informations dans un fichier texte brut. et ne rien cacher du tout dans un binaire.
"ha bon" vas tu dire ... oui, et cette technique est apparue au debut de l'informatique, afin d'eviter une lecture directe d'un fichier avec les commandes "type" ou "read" des os en ligne de commandes.
il suffit d'ajouter des ETX, BS, VT pour que l'affichage soit interrompus ou tronqué.
mais ce n'etait valable qu'a l'epoque ou l'interface graphique etait encore qu'une utopie, donc a l'epoque du DOS.

il est certain que quand on parle richedit, memo, ou notepad de windows, on se limite au caracteres numerique, alphabetique, de ponctuation etc. ce qui est humainement lisible. c'est pas faux. mais les caracteres dit de control ou etendus pourront tout de même etre affiché, tant que la police d'affichage selectionnée en est capable (police system, terminal ou shell).
c'est ce que les "coders" utilise pour faire de l'ascii art dans les fichiers NFO, fichier qui sont en text brut, lisible dans n'importe quel notepad.

mais un binaire n'en est pas pour le moins lisible grace a autre chose. un editeur hexadecimal, ou même un editeur de texte comme notepad++ qui affiche les caracteres non-humain :)
peu importe le format, tant qu'il n'y a pas d'encodage precis, un fichiers reste une suite de code hexadecimaux pouvant etre lus facilement et donc interprété sur une table ascii ou sur n'importe qu'elle table de caracteres.

par contre, un fichier RTF ou DOC qui possede un encodage special voir parfois une compression, ne peuvent pas etre lus autrement que par un programme specialisé (word, work, writer, wordpad etc).

donc pour ton probleme, il serait plus "secure" d'ecrire en format DOC par exemple que d'ecrire en text brut ou en binaire sans transformation.

pour ce qui est du savetofile, si tu avait pris la peine de faire un click droit sur ce mots et "chercher la delaration", tu aurait remarqué qu'il se presente comme suis :

procedure TStrings.SaveToFile(const FileName: string);

var

  Stream: TStream;

begin

  Stream := TFileStream.Create(FileName, fmCreate);

  try

    SaveToStream(Stream);

  finally

    Stream.Free;

  end;

end;

et si on regarde ce que fait SaveToStream :

procedure TStrings.SaveToStream(Stream: TStream);
var
  S: string;
begin
  S := GetTextStr;
  Stream.WriteBuffer(Pointer(S)^, Length(S));
end;
 
ici on recupere le contenus de TStrings, et on le sauvegarde tel quel, aucune verification du contenus de S ...

alors bien sur, si on inclus des caracteres EOF, CR, LF, NUL ou ETX, cela risque de deranger la fonction Length(S) qui renverra une taille erronée et plus courte que la veritable longeur de S.

donc effectivement oui, si tu ouvre un executable (qui contient enormenent de caractere cité precedement), si tu fait un savetofile la dessus, oui, ça vas enregistrer un fichier plus court bref le corrompre.
mais, par contre, les données du fichiers sont bien lue par LoadFromFile (voir plus bas), donc si le fichier ouvert, contient du texte en clair, même si le memo ou richedit ou listbox sont incapable d'afficher nativement les caracteres speciaux, il affichera neanmoins le texte en clair plus ou moins bien.
ce qui "securitativement" n'est pas super top.

par contre, rien ne t'empeche de deriver le loadfromstream et le savetostream de TStrings
et de modifier la façon dont il lit les fichiers, on peu même le rendre incapable de lire du texte brut.

en gros :

procedure TStrings.SaveToStream(Stream: TStream);

var

  S: string;

begin
  if (enregistrement codé) then
  begin
     { encodeur }
  end
  else
  begin
    S := GetTextStr;

    Stream.WriteBuffer(Pointer(S)^, Length(S));
  end;

end;

et

procedure TStrings.LoadFromStream(Stream: TStream);
var
  Size: Integer;
  S: string;
begin
  BeginUpdate;
  try
    if (lireencodé) then
    begin
      { decodeur }
    end
    else
    begin
{ determination de la taille de S par rapport au contenus du stream, un stream peu contenir n'importe quoi ... }
      Size := Stream.Size - Stream.Position;
      SetString(S, nil, Size);
{ une lecture, brute, sans verification... jusque la, S contient tout ce qui est dans le fichier }
      Stream.Read(Pointer(S)^, Size);
{ c'est la que ça peu poser probleme, si S contient un NUL avant la veritable fin de S, on transmet une ligne tronquée voir rien du tout si
NUL se trouve en premiere position.
c'est ce fonctionnement qui peu nous interréssé (voir plus bas)
}
      SetTextStr(S);
    end;
  finally
    EndUpdate;
  end;
end;

on vois que loadfromfile utilise une variable String (chaine a zero terminal) donc si un caractere NUL apparait avant celui qui est a la fin, le reste de la chaine apparait comme tronqué.
pourtant, en memoire, S contient toujours ce qui a été lus!
même si nativement TStrings est incapable de gerer cela, nous on le peu!
il suffit de lire S en utilisant la taille initiale du stream qui a été lu.

alors certe, si on utilise la version donnée par florenth, on est presque dans le bon.
on ajoute une signature mais est-ce que cela fait vraiment ce qu'on attend ?

reponse non.

par contre si on fait :

procedure Save(const FileName: string; Strings: TStrings);
var
  Signature : cardinal;
  FlxZ : TZCompressionStream; { ZLibEx }
  FlxF : TFileStream;
  S    : String;
  Sz   : integer;
begin
  Signature := $004E4942; // B+I+N+NULL
  S         := Strings.GetTextStr;
  Sz        := Length(S);

  FlxF := TFileStream.Create(FileName, fmCreate);
  try
    FlxF.WriteBuffer(Signature, 4);
    FlxF.WriteBuffer(Sz, 4);

    FlxZ := TZCompressionStream.Create(FlxF, zcLevel7);
    try
      FlxZ.Write(pointer(S)^, Sz);
    finally
      FlxZ.Free;
    end;

  finally
    FlxF.Free;
  end;
end;
 
hop, on obtient notre propre format de fichier, compréssé (bonus). donc vraiment illisible par n'importe quel notepad, même evolué.
bon par contre, un cracker trouvera trés vite la structure du fichier sgn+original size+block compréssé par zlib.
 

<hr size="2" width="100%" />
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
26 juin 2008 à 19:16
Florenth,
Je ne suis pas HS, ce que j'utilise est certe vieux, mais c'est sur ce sujet que je faisais ma demande et pas sur l'utilisation des Streams, le problème étant que vous voulez m'OBLIGER à utiliser les streams alors que je ne veux pas.

La raison ?
J'ai déjà tenté de l'utiliser et à chaque fois cela foire, alors plutôt que me cassé la tête dessus, je préfère que mon projet sorte avec la première version en utilisant les blocs et voir pour les prochaines avec les streams.
Pour info, la sortie de mon programme fût reporté depuis plusieurs mois pour différents problèmes notemment avec Windows, et y a déjà une panoplie de personne au courant du projet et qui attendent la sortie avec impatience, comme je m'en sert avec BlockRead et BlockWrite, autant sortir la première version avec, la seconde version intègrera les streams là y auras aucun soucis vu que le programme sera déjà utilisable, donc je pourrais passer tous le temps requis.

Oui le SaveToStream le permet j'ai pas dit le contraire, j'ai d'ailleur dit sur mon poste précédent (désolé d'ailleur pour la geulente de mes deux  autres posts mais vous m'avez un peu énervé), que je suis d'accord que cette fonction me permet de le faire puisque utilisant les Streams.
Toutefois Jlen100 dans la page 2 (premier post de la page), m'affirme que se que je peux faire est possible avec le SaveToFile, j'ai tenté gentiment de lui expliquer que cette fonction ne permettait pas ce que je veux, et il a insisté en disant que si que c'est moi qui connais rien et il m'a cité la doc.
A aucun moment il m'a parlé du SaveToStream et si il en avait parlé, il aurait eu la même réponse : "Je ne métrise pas les Streams, je préfère donc continuer pour le moment avec BlockRead et BlockWrite".

Je ne vois pas où je suis fainéant, j'avais un problème, j'ai cherché sur google, sur phidels et ici et j'avais pas la réponse, donc je suis venu demandé de l'aide sur le forum c'est normal.
On m'a de suite répondu d'utiliser les Streams, avec un exemple et j'ai répondu que je préfère BlockRead et BlockWrite, ensuite Cirec m'a donné un exemple suivant donc ce que je demandais et je l'ai remercié pour m'avoir aider.

Tu dis ne pas vouloir lire mes arguments qui pour toi ne sont pas convainquant, donc pour toi si je n'utilise pas les streams ben je mérite pas d'avoir le droit de demander de l'aide.

J'ai demandé de l'aide sur un truc particulier, et on me répond avec une autre méthode (les streams), j'insiste sur ma demande avec BlockRead/BlockWrite car c'est ce que je métrise le plus entre les deux.
Je reçois une réponse qui m'aide, je remercie la personne.
Jusque là tous va bien, ensuite on vient me dire d'utiliser SaveToFile, je dis que cette fonction ne correspond pas à ce que je veux faire vu que cela permet d'enregistrer UNIQUEMENT le contenu du composant en question et non d'écrire un fichier binaire (dans mon cas c'est un fichier d'archivage sans compression du moins pour le moment).

Et là, la personne me répond en citant la doc et en disant que sois-disant c'est bien cette fonction que je dois utiliser alors que toi même tu reconnais que se serait SaveToStream, donc pas de SaveToFile.

Si maintenant tu veux pas lire mon message, ne le lis pas, je t'oblige pas.

Ce qui est sur c'est que je m'excuse pour avoir geuler, et là mon message n'est ni insultant ni déplacé ni rien de non conforme à ce que l'on attend d'un message sur un forum.
Je ne fais que répondre gentiment à ton message et je te donne les raisons de mon choix de BlockRead/BlockWrite c'est tous.
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
26 juin 2008 à 19:23
Foxi,
Je suis d'accord sur le fait que SaveToFile utilise les streams, toutefois si tu regardes en profondeur, il ouvre le fichier et enregistrer dedans puis le ferme, donc impossible d'inscrire des informations avant et après a moins de taper plusieurs lignes de code supplémentaires, donc cela ne peut pas correspondre à mes besoins, on en revient donc aux solutions suivantes :
- Utiliser un stream
- Utiliser l'ancienne méthode : blockRead et BlockWrite

Comme dit sur mon message juste plus haut (j'ai pas pu voir le tiens avant), j'ai fait ce choix afin de ne pas devoir attendre encore des mois avant de sortir mon produite, la prochaine version intégrera certainement les streams car je sais que c'est plus pratique, toutefois c'est pas le sujet du jour.

De toute façon, j'ai eu une réponse de Cirec, et je l'ai remercié pour sa réponse qui m'a permis d'avanccé et qui fait que mon programme est quasiement terminé.
Donc je vois pas le soucis, j'ai demandé de l'aide, on m'a parlé des streams, j'ai pris note qu'il vaut mieux s'en servir, j'ai eu la réponse à ma demande de base, l'auteur de la solution à était remercié.
Pourquoi continuer sur cela ?
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
26 juin 2008 à 20:11
si Delphi est incapable de lire la suite, c'est parce par defaut il n'accepte pas l'unicode contrairement a bloc note, notepad++ et le shell.

on demontre bien que ce ne serait pas suffisant...

par contre avec ceci :

uses ZLibEx;

const
  Sign : cardinal = $004E4942;

procedure Save(const FileName: string; Strings: TStrings);
var
  Signature : cardinal;
  FlxZ : TZCompressionStream;
  FlxF : TFileStream;
  S    : String;
  Sz   : integer;
begin
  Signature := Sign;
  S         := Strings.Text;
  Sz        := Length(S);

  FlxF := TFileStream.Create(FileName, fmCreate);
  try
    FlxF.WriteBuffer(Signature, 4);
    FlxF.WriteBuffer(Sz, 4);

    FlxZ := TZCompressionStream.Create(FlxF, zcLevel7);
    try
      FlxZ.Write(pointer(S)^, Sz);
    finally
      FlxZ.Free;
    end;

  finally
    FlxF.Free;
  end;
end;

procedure Load(const FileName: string; Strings: TStrings);
var
  Signature : cardinal;
  FlxZ : TZDecompressionStream; { ZLibEx }
  FlxF : TFileStream;
  S    : String;
  Sz   : integer;
begin
  FlxF := TFileStream.Create(FileName, fmOpenRead);
  try
    FlxF.Read(Signature, 4);
    if Signature = Sign then
    begin
      FlxF.Read(Sz, 4);
      FlxZ := TZDecompressionStream.Create(FlxF);
      try
        SetString(S, nil, Sz);
        FlxZ.Read(pointer(S)^, Sz);
        Strings.SetText(PChar(S));
      finally
        FlxZ.Free;
      end;
    end
    else
    begin
      FlxF.Position := 0;
      Strings.LoadFromStream(FlxF);
    end;
  finally
    FlxF.Free;
  end;
end;

on obtient cela :

un chouille deja plus efficace.
en fait j'ai marqué "encodage/decodage" mais c'est de la compression toute simple.
suffirait de passer cela dans une moulinette et hop, voir ma source HRot par exemple.

<hr size="2" width="100%" />
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
26 juin 2008 à 20:13
"Pourquoi continuer sur cela ?"

1) pour t'aider.
2) parce que le sujet m'interresse
3) parce que j'aime bien donner mon avis même si personne ne vas le lire
4) mmm ... non c'est tout.

<hr size="2" width="100%" />
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
26 juin 2008 à 20:37
ah oui, sinon, evite de te sentir agressé a la moindre remarque.

n'oublis pas que sur le net on ne peu voir notre interlocuteur et donc les remarques de type "vanne" ou "humour" ou encore "gentille" peuvent parfois apparaitre comme agressive ou mal venue, impolie etc.

n'oublie pas que si tu pense voir une agression, considere la comme un malentendus et réitère tes propos sous un forme plus adequate voir ajoute quelques smileys pour preciser la portée de tes propos.

exemple :

arretez de me prendre pour un con   (pas content)

et

arretez de me prendre pour un con (vexé, choqué)

et

arretez de me prendre pour un con (bon je sais, je debute et je dois dire des betises)

voila trois phrase identique mais n'ayant pas la même portée.

ensuite, quand les gens te repondent, n'oublie pas qu'ils prennent du temps pour t'aider.
moi j'ai pris 1 heure pour tester et te repondre, les autres on pris egalement du temps.
donc evite d'avoir d'etre penible avec eux, modere tes propos et respecte ce temps qu'ils te consacrent.
car un jours, toi aussi tu aidera quelqu'un et tu sera content que cette personne respecte ton sacrifice (même petit)... mets toi a notre place, personne n'est content quand on l'envoie chier alors qu'on est en train de l'aider.

n'oublie pas ça et tout ira pour le mieux.

et n'oublie pas non plus :

l'impatience est l'ennemie du bon-sens.
l'impatience est l'ennemie du developpeur.
l'impatience est l'ennemie de la qualité.

<hr size="2" width="100%" />
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
26 juin 2008 à 20:48
Comme dit plus haut foxi, je m'excuse de m'être emporté, tous est partis du fait que l'on me disait d'utiliser le SaveToFile ce qui ne correspond pas à ma demande.

Pour ta source sur le TFileStream, merci, je l'étudierais sitôt que j'aurais sortie la première version de mon programme afin de le migrer vers cette méthode plutôt que celle que j'ai choisis.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
26 juin 2008 à 22:08
En tout cas un grand bravo à foxi qui nous a bien dépatouillé le tout.

cantador
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
26 juin 2008 à 23:38
Tout ça me fait penser à une jolie phrase de Milan Kundera :


« Comprendre que cette impatience de parler est en même temps un implacable désintérêt à écouter. »
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
27 juin 2008 à 00:57
Je poste ici car cela reste dans le sujet.
Dans le même registre que pour enregistrer, je souhaite pouvoir lire (toujours avec mon BlockRead) dans le fichier.
Je veux que la variable prenne la taille des données à lire dans le fichier, j'ai donc pensé à un Array of Char auquel j'affecte la taille en question.

Mais voici l'erreur :
Le projet FicEditor.exe a provoqué une classe d'exception EInOutError avec le message 'Lecture au-delà de la fin de fichier'.

Et voici le code :
procedure FEFFormat.ReadFileXML(var Character: String; var Place: String;
        var Idea: String; var Fic: String);
begin
BlockRead(F, CRCFile, 4);
BlockRead(F, SizeFile, 4);

SetLength(FileXML, SizeFile);
BlockRead(F, FileXML, SizeFile);
end;

FileXML est du type Array of Char.
J'ai tenté avec un Array [1..34] of Char et ça fonctionne sans problème.
donc j'en déduit que le soucis provient du Dynamic Array.

Merci d'avance pour l'aide.

P.S.: Le 34 correspond à la taille des données que je veux lire dans le fichier d'exemple.
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
27 juin 2008 à 10:47
Cantador,
Un exemple parfait pour montrer que ma présence semble indésirable ici.
Tu EXIGE que j'utilise VOS méthodes avant de venir poster, ce qui est inadmissible.
Je suis pas revenu à la charge, le sujet du topic parle du dynamic array, hors le problème se situe a ce niveau là, je pourrais utiliser les streams cela changerais rien, je ne connais pas à l'avance la taille du texte à extraire de mon fichier, cela est connu par une donnée codé sur 4 octets dans le fichier avant le texte en question, je peux quand même pas réserver en mémoire une place de 2Go pour du texte, soyons réaliste, le mieux est de mettre la variable à la bonne taille.

Hors ici ce qui foire c'est justement cela c'est pas le BlockRead qui fait foiré mais bien le Dynamic Array.
Enfin bon, j'aurais mieux fait de me faire, c'est finalement ce que je vais faire.

P.S.: Je remarque quand même que je me suis excusé de m'être emporté, j'ai cru l'incident clos.
Je viens poser un problème avec un Dynamic Array et on me répond par de l'insolence en me disant d'étudier ce qui fût dit alors que cela ne parle pas du présent problème.

J'aurais jamais cru qu'un site aussi sérieux ferait tous pour se débarrasser des autres et rester dans une petite communauté de 3 ou 4.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 juin 2008 à 11:13
Franchement, tu m'as l'air bien excité et tu devrais faire un effort de lecture..
Bien au contraire, ma démarche étant dans le sens de l'apaisement et non l'inverse :

"je propose"..
et toi tu traduis pas "Tu EXIGE".

Comment veux-tu que dans ces conditions, il puisse y avoir un dialogue..

et puis, cela me semble normal de respecter les règles établies lorsqu'on
arrive dans une communauté.

je ne vois pas grand chose d'autres à ajouter.

cantador
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
27 juin 2008 à 11:20
-> [auteur/F0XI/360948.aspx f0xi] vient
justement de te faire un cours sur la façon de déterminer les fins
de fichier et lis aussi la petite phrase de Caribensila.

Tu commences par me dire de lire ce que disent les autres, hors je dis bien que mon code fonctionne parfaitement avec un Array of char normal mais en Dynamic Array cela foire.
Le message de Foxi montre l'utilisation du stream mais pas comment utiliser un Dynamic Array, hors cela est bien le sujet du topic, donc ma demande est correspondante au topic.
Je vois pas où tu proposes puisque texto tu me dis d'aller lire les posts des autres qui ont rien à voir avec le Dynamic Array.

->Comment veux-tu que dans ces conditions, il puisse y avoir un dialogue..

et puis, cela me semble normal de respecter les règles établies lorsqu'on
arrive dans une communauté.

Justement, y a une règle assez importante : On s'en tiens au sujet du topic.
Hors ici, le topic est pour de l'aide sur un Dynamic Array, ma demande porte dessus et tu me répond d'aller lire les posts des autres parlant nullement du Dynamic Array mais uniquement des streams.

Le dialogue est donc impossible, je suis venu poliment demander de l'aide sur un sujet correspondant bien au topic, et tu me répond dans des conditions déplorables.

Comment veux-tu dans ses conditions là que je garde mon sang-froid ?
0
Rejoignez-nous