LECTURE/ÉCRITURE DE CHAÎNES DYNAMIQUES DANS UN FLUX

cs_Laurent1313 Messages postés 24 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 15 décembre 2008 - 27 juin 2003 à 12:04
cs_j1mb0 Messages postés 13 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 27 juin 2003 - 27 juin 2003 à 19:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12637-lecture-ecriture-de-chaines-dynamiques-dans-un-flux

cs_j1mb0 Messages postés 13 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 27 juin 2003
27 juin 2003 à 19:01
Malgré que vos commentaires eux sont utiles.
cs_j1mb0 Messages postés 13 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 27 juin 2003
27 juin 2003 à 19:01
Doh!

et moi qui avait tout commenté en plus :-( lol

bonbon là je me suis gourré sur toute la ligne hahaha.

Selon vous serait-ce mieux que j'enlève cette source qui est carrément inutile ?
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
27 juin 2003 à 12:29
Arf, vi, lol

lecture :

const MaxStringSize:=8000; // 8000 chars max ds la chaine

var p:Pchar;
begin
Getmem(p,MaxStringSize);
Stream.Readbuffer(p,MaxStringSize);
StrPas(P,Result);
Freemem(p);
end;

Ecriture:
result:=True;
if length(s)<MaxStringSize then
begin
s:=s+#0;
stream.WriteBuffer(s[1], length(s));
end
else
Result:=False;

Voila c'est beaucoups plus efficace et on doit pas stocker les longeurs de chaines...

ps:
pour le setlength :
SetLength(s, SizeOf(s)+1); // a oublier, lol



Bon coding ....

ManChesTer.
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
27 juin 2003 à 12:18
Je pense que Laurent1313 a raison.

pour le setlength :
SetLength(s, SizeOf(s)+1);

Je ne vois pas l'interret de TFileXStream..., il n'amèliore rien, n'apoorte rien à TFileStream et rend le code plus lourd inutilement ce qui a pour effet principal de ralentir les operations de FileStream ...

Par contre le meme compos qui utiliserais les apis ou les routines de bas niveau d'écriture dans les fichiers semblerais beaucoups plus "fun" et utilisable.

Bon coding...

ManChesTer.
cs_Laurent1313 Messages postés 24 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 15 décembre 2008
27 juin 2003 à 12:04
Tu te compliques la vie !! ^^ Pour écrire une chaîne dans un flux tu peux faire :
stream.WriteBuffer(s[1], length(s));
et pour la lire :
SetLength(s, tailleDeLaChaine);
stream.ReadBuffer(s[1], length(s));
Je pense que c'est bcp plus simple ! Sinon j'ai l'impression que tu limites la taille des chaînes à 256 caractères or c'est fréquent les chaînes qui dépassent cette taille.