Format String avec XE2 [Résolu]

Signaler
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020
-
Messages postés
4
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
25 août 2013
-
Petit problème avec les nouveaux format string de XE2:
après traitement, le mot 'durée' devient 'durée'
j'ai bien tenté de modifier le format String en AnsiString et UnicodeString mais pas mieux?!?
Qui peux m'aider???

PhilLu

17 réponses

Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
re,

si le fichier source est en Unicode, TextFile/AssignFile etc.
ne le gèrent pas correctement !!!

essaye avec un StringList:
procedure TForm7.lignes;
var
S,L,lign_prec: string; //--Note que l'on utilise le type string
i, J: Integer;
SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile(ExtractFilePath(Application.ExeName)+'/temp/PGP_DEM_raw.log');
    for J := 0 to SL.Count - 1 do
    begin
      S := SL[J];
      L:= copy(S,0,49);
      S:=copy(S,pos(']',S)+1,length(S));
      if pos('[ETB]',S)>0 then
        lign_prec:=copy(S,0,pos('[ETB]',S)-1)
      else
      if (S<>' ') and (copy(S,2,2)<>'H|')  and (copy(S,2,2)<>'L|')  then
      begin
        i:=i+1;
        memo1.Lines.Append(lign_prec+S);
        lign_prec:='';
        Label2.Caption:=intToStr(i);
      end;
    end;
    memo1.Lines.Append('Timestamp dernière ligne '+L);
  finally
    SL.Free;
  end;
end;


Sinon
{$IFDEF UNICODE}
permet une compilation conditionnelle en fonction du compilateur utilisé:

{$IFDEF UNICODE}
    Le code placé ici compilera à partir de Delphi 2009 - XE3 ...
    string = WideString
    Char   = WideChar
    PChar  = PWideChar
{$ELSE}
    Le code placé ici compilera sur les versions antérieurs (D4 - D7 ...)
    string = AnsiString
    Char   = AnsiChar
    PChar  = PAnsiChar
{$ENDIF}


[hr]@+Cirec
[hr]
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
d'une manière générale :


[TStringList / TStrings].LoadFromFile(nom, TEncoding.{Encodage d'origine});
{traitement}
[TStringList / TStrings].SaveToFile(nom, TEncoding.{ANSI ou UTF8});
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Bonjour,
XE2
cantador
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

Merci Cantador,
J'ai, comme expliqué, tenté d'utiliser S,L,lign_prec: UnicodeString; et S,L,lign_prec: AnsiString;
mais cela ne change rien?!?
Je ne trouve rien de mieux dans ton lien, y a t'il un format correspondant pour textfile???
Merci pour tes conseils!!!
PhiLu
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Salut,

"après traitement, le mot 'durée' devient 'durée'"
Donne nous le code d' affectation car Delphi n' a aucun problème de gestion de string.
L' erreur vient donc de la source ...

a+


Composants Cindy pour Delphi
Faites une donation.
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Salut,

comme Mauricio le dit sans code on ne peut rien faire.

Il nous faut le fameux "Traitement"


[hr]@+Cirec
[hr]
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
De toute façon, le mot 'durée' qui devient 'durée' n'est pas dû à l'Unicode qui provoque des bugs bien moins lisibles. ^ ^
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

Voici le code (extrait):
//-------------Lecture lignes pour mettre en mémoire-------------------
  procedure TForm1.lignes;
  var
  F: textfile;
  S,L,lign_prec: UnicodeString; //--j'ai assayé String et AnsiString mais pas mieux--
  i: Integer;
  begin
   AssignFile(F,ExtractFilePath(Application.ExeName)+'/temp/PGP_DEM_raw.log');
      Reset(F);
      repeat
      Readln(F,S);
      L:= copy(S,0,49);
      S:=copy(S,pos(']',S)+1,length(S));
      if pos('[ETB]',S)>0 then
      lign_prec:=copy(S,0,pos('[ETB]',S)-1)
       else

      if (S<>' ') AND (copy(S,2,2)<>'H|')  AND (copy(S,2,2)<>'L|')
       then
      begin
      i:=i+1;
      memo1.Lines.Append(lign_prec+S);
      lign_prec:='';
      Label2.Caption:=intToStr(i);
      end;
      until EOF(F);
      memo1.Lines.Append('Timestamp dernière ligne '+L);
      end;


//-------------MAIN PRGM-----------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
begin
Debut := Now;

copie_fichier(self);
ligne1(self);
lignes(self);

Label1.Caption:= IntToStr(SecondsBetween(Debut,Now));
end;


Merci pour vos avis!!!
Aussi qu'est-ce que ceci:{$IFDEF UNICODE}???
PhilLu
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
@Cirec: je ferai le load avec le bon char encoding:
SL.LoadFromFile(ExtractFilePath(Application.ExeName)+'/temp/PGP_DEM_raw.log', TEncoding.Unicode);

a+



Composants Cindy pour Delphi
Faites une donation.
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
@Mauricio:
Salut,

je ne pense pas que soit utile lors du chargement.

Pour l'instant mes chargement de fichiers se sont toujours bien passé sans devoir préciser le type d'encodage ... ceci Delphi le fait en toute transparence. Par contre pour l'enregistrement là ça devient utile si on souhaite changer de format.


Sinon il serait sympa d'avoir l'avis de PhilLU

[hr]@+Cirec
[hr]
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

Ben la première solution, c'est pas mieux, et avec la seconde (TEncoding.Unicode), j'obtiens ça:
㌠㈰‱㩰〲㌱‰删ㄨऩ䕛呏⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㐸‰㩰〲㌱‰删ㄨऩ䕛兎⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㔸′㩰〲㌱‰圠ㄨऩ䅛䭃⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㠠㐲‹㩰〲㌱‰删㔨⤰嬉呓嵘䠱屼♞籼䡼獯年⸱〰籼籼籼偼ㅼ㉼㄰〳㈳㈵㐳㐲嬸剃孝呅嵘㡂䍛嵒䱛嵆ਠ䝐彐䕄⁍〲㌱㌰

:-(
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

ben zut, chez moi c'était du chinois!!!
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
peux tu nous fournir une copie du fichier en question afin de pouvoir tester ?



[hr]@+Cirec
[hr]
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

En fait, ce fichier contient des noms de patients et provient d'une machine linux.
Je l'ai raccourci et enlevé les noms.
Comment puis-je l'envoyer?
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Si le fichier raccourci provoque aussi l'erreur alors tu peux le déposer ici
dans un zip peut être


[hr]@+Cirec
[hr]
Messages postés
4
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
25 août 2013

et quelle est la solution retenue ?

--