cs_wari
Messages postés16Date d'inscriptionmercredi 28 août 2002StatutMembreDernière intervention19 décembre 2008 7 janv. 2008 à 08:07
Salut les programmeurs,
je né pas encore tester ce code mais en premiere vue
ce que je comprent pas, est que vous utilisez un argument s : string en entrée, les chane de ce type ne dépasse pas les 256 caractères.
mm si vous voulez utilisé cette fct ligne par ligne dans un text HTML, je pense qu'il ya des code HTML ou les ligne dépasse largement les 256 caractères, pk ne pas utiliser un mémo par expmple.
cordialement
svendeville
Messages postés9Date d'inscriptionsamedi 10 avril 2004StatutMembreDernière intervention11 octobre 2007 11 oct. 2007 à 09:25
Salut Japee,
Merci pour tes commentaires et conseils, je confirme que mon code ne pourra être utilsé que si on utilise ta fonction pour convertir en html, c'est justement en ce sens que je l'ai pensé.
En fait nous développons une appli dont l'iterface est entirement faite en français, et pour faire le traduction, j'ai créé en delphi un exctracteur qui vas récupèrer les chaines de cette appli, et pour que les traducteur puissent travailler corectement, je génére un fichier au standard XLIFF, ce qui m'oblige à convertir tous les caractères spéciaux (Là j'utilise ton code), après traduction, je doit reconvertir dans l'appli corectement en texte, donc, j'ai fait cette fonction en contrepartie de la tienne.
Je vais suivre tes conseils pour la boucle et les variables et constantes, et je vais également mettre la source sur la rubrique Snippet.
Encore merci à toi.
Bonne continuation.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 9 oct. 2007 à 15:51
Ah oui, autre chose...
Ta fonction ne pourra être utilisé que si le texte html a été codé selon un procédé identique à celui que j'utilise.
Et ensuite, dans mon code, il vaut mieux écrire :
STmp := Char(StrToIntDef(Copy(STmp, 3, L - 3), 63));
...on ne sait jamais.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 9 oct. 2007 à 15:22
Salut svendeville.
Je suis à la fois flatté et désolé que tu fasses référence à un si vieux code que je n'ai pas dépoussiéré depuis que je l'ai posté, il y a bientôt 3 ans...
Bon, 2 ou 3 choses :
Quand j'ai posté le mien, la rubrique Snippet n'existait pas, et le mien comme le tien y seraient plus à leur place.
Il vaut mieux déclarer une variable string en constante quand on la passe en paramètre (si l'on n'a pas besoin de la modifier bien sûr), on y gagne en efficacité. Tu noteras que je ne l'avais pas fait sur mon code, ce qui est un exemple tout à fait déplorable pour les nouvelles générations de Delphistes. Faut dire à ma décharge que je programmais pas depuis ben longtems à c't' époque...
Il faut éviter les instructions "Continue" et "Break" dans une boucle, sauf cas particulier et évident.
Je pense que tu aurais eu intérêt à utiliser plutôt une boucle repeat ou while étant donné que l'incrémentation de l'index dans la chaîne à parcourir n'est pas régulière. Tu aurais ainsi pu faire l'économie de quelques variable.
Voici comment j'aurais fait, en essayant de respecter ton approche :
function HtmlToText2(const S: string): string;
var
Index: Integer;
STmp: string;
L: Integer;
begin
Result := '';
Index := 1;
while Index < Length(S) + 1 do
begin
if (S[Index] = '&') and S[(Index + 1)] = '#') then
begin
STmp := Copy(S, Index, 6);
L := Pos(';', STmp);
STmp := Char(StrToInt( Copy(STmp, 3, L - 3) ));
Inc(Index, L)
end
else
begin
STmp := S[Index];
Inc(Index);
end;
Result := Result + STmp;
end;
end;
Quoi qu'il en soit, je t'encourage à persévérer, c'est plutôt pas mal pour 4 semaines de prog' au compteur.
7 janv. 2008 à 08:07
je né pas encore tester ce code mais en premiere vue
ce que je comprent pas, est que vous utilisez un argument s : string en entrée, les chane de ce type ne dépasse pas les 256 caractères.
mm si vous voulez utilisé cette fct ligne par ligne dans un text HTML, je pense qu'il ya des code HTML ou les ligne dépasse largement les 256 caractères, pk ne pas utiliser un mémo par expmple.
cordialement
11 oct. 2007 à 09:25
Merci pour tes commentaires et conseils, je confirme que mon code ne pourra être utilsé que si on utilise ta fonction pour convertir en html, c'est justement en ce sens que je l'ai pensé.
En fait nous développons une appli dont l'iterface est entirement faite en français, et pour faire le traduction, j'ai créé en delphi un exctracteur qui vas récupèrer les chaines de cette appli, et pour que les traducteur puissent travailler corectement, je génére un fichier au standard XLIFF, ce qui m'oblige à convertir tous les caractères spéciaux (Là j'utilise ton code), après traduction, je doit reconvertir dans l'appli corectement en texte, donc, j'ai fait cette fonction en contrepartie de la tienne.
Je vais suivre tes conseils pour la boucle et les variables et constantes, et je vais également mettre la source sur la rubrique Snippet.
Encore merci à toi.
Bonne continuation.
9 oct. 2007 à 15:51
Ta fonction ne pourra être utilisé que si le texte html a été codé selon un procédé identique à celui que j'utilise.
Et ensuite, dans mon code, il vaut mieux écrire :
STmp := Char(StrToIntDef(Copy(STmp, 3, L - 3), 63));
...on ne sait jamais.
9 oct. 2007 à 15:22
Je suis à la fois flatté et désolé que tu fasses référence à un si vieux code que je n'ai pas dépoussiéré depuis que je l'ai posté, il y a bientôt 3 ans...
Bon, 2 ou 3 choses :
Quand j'ai posté le mien, la rubrique Snippet n'existait pas, et le mien comme le tien y seraient plus à leur place.
Il vaut mieux déclarer une variable string en constante quand on la passe en paramètre (si l'on n'a pas besoin de la modifier bien sûr), on y gagne en efficacité. Tu noteras que je ne l'avais pas fait sur mon code, ce qui est un exemple tout à fait déplorable pour les nouvelles générations de Delphistes. Faut dire à ma décharge que je programmais pas depuis ben longtems à c't' époque...
Il faut éviter les instructions "Continue" et "Break" dans une boucle, sauf cas particulier et évident.
Je pense que tu aurais eu intérêt à utiliser plutôt une boucle repeat ou while étant donné que l'incrémentation de l'index dans la chaîne à parcourir n'est pas régulière. Tu aurais ainsi pu faire l'économie de quelques variable.
Voici comment j'aurais fait, en essayant de respecter ton approche :
function HtmlToText2(const S: string): string;
var
Index: Integer;
STmp: string;
L: Integer;
begin
Result := '';
Index := 1;
while Index < Length(S) + 1 do
begin
if (S[Index] = '&') and S[(Index + 1)] = '#') then
begin
STmp := Copy(S, Index, 6);
L := Pos(';', STmp);
STmp := Char(StrToInt( Copy(STmp, 3, L - 3) ));
Inc(Index, L)
end
else
begin
STmp := S[Index];
Inc(Index);
end;
Result := Result + STmp;
end;
end;
Quoi qu'il en soit, je t'encourage à persévérer, c'est plutôt pas mal pour 4 semaines de prog' au compteur.
A plus.
japee