LECTURE/ÉCRITURE DE CHAÎNES DYNAMIQUES DANS UN FLUX
cs_Laurent1313
Messages postés24Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention15 décembre 2008
-
27 juin 2003 à 12:04
cs_j1mb0
Messages postés13Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention27 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.
cs_j1mb0
Messages postés13Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention27 juin 2003 27 juin 2003 à 19:01
Malgré que vos commentaires eux sont utiles.
cs_j1mb0
Messages postés13Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention27 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és374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 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és374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 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és24Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention15 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.
27 juin 2003 à 19:01
27 juin 2003 à 19:01
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 ?
27 juin 2003 à 12:29
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.
27 juin 2003 à 12:18
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.
27 juin 2003 à 12:04
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.