Format String avec XE2

Résolu
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021 - 12 juil. 2013 à 13:11
SergeItIsMe Messages postés 4 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 25 août 2013 - 25 août 2013 à 13:59
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juil. 2013 à 00:04
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]
1
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 août 2013 à 13: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});
1
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
12 juil. 2013 à 13:35
Bonjour,
XE2
cantador
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
12 juil. 2013 à 14:25
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
0

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

Posez votre question
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 juil. 2013 à 15:17
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juil. 2013 à 15:26
Salut,

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

Il nous faut le fameux "Traitement"


[hr]@+Cirec
[hr]
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
13 juil. 2013 à 14:14
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. ^ ^
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
13 juil. 2013 à 15:38
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
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 juil. 2013 à 10:17
@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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 juil. 2013 à 16:44
@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]
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 juil. 2013 à 16:59
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
15 juil. 2013 à 17:27
Ben la première solution, c'est pas mieux, et avec la seconde (TEncoding.Unicode), j'obtiens ça:
㌠㈰‱㩰〲㌱‰删ㄨऩ䕛呏⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㐸‰㩰〲㌱‰删ㄨऩ䕛兎⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㔸′㩰〲㌱‰圠ㄨऩ䅛䭃⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㠠㐲‹㩰〲㌱‰删㔨⤰嬉呓嵘䠱屼♞籼䡼獯年⸱〰籼籼籼偼ㅼ㉼㄰〳㈳㈵㐳㐲嬸剃孝呅嵘㡂䍛嵒䱛嵆ਠ䝐彐䕄⁍〲㌱㌰

:-(
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
15 juil. 2013 à 17:35
ben zut, chez moi c'était du chinois!!!
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 juil. 2013 à 17:37
peux tu nous fournir une copie du fichier en question afin de pouvoir tester ?



[hr]@+Cirec
[hr]
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
16 juil. 2013 à 08:56
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?
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
16 juil. 2013 à 16:34
Si le fichier raccourci provoque aussi l'erreur alors tu peux le déposer ici
dans un zip peut être


[hr]@+Cirec
[hr]
0
SergeItIsMe Messages postés 4 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 25 août 2013
25 août 2013 à 13:59
et quelle est la solution retenue ?

--
0
Rejoignez-nous