Format String avec XE2 [Résolu]

Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
- - Dernière réponse : SergeItIsMe
Messages postés
4
Date d'inscription
mercredi 4 janvier 2006
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
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
1
Merci
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]

Merci Cirec 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
9 mars 2018
1
Merci
d'une manière générale :


[TStringList / TStrings].LoadFromFile(nom, TEncoding.{Encodage d'origine});
{traitement}
[TStringList / TStrings].SaveToFile(nom, TEncoding.{ANSI ou UTF8});

Merci f0xi 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de f0xi
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
0
Merci
Bonjour,
XE2
cantador
Commenter la réponse de cs_cantador
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
0
Merci
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
Commenter la réponse de PhilLu
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
0
Merci
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.
Commenter la réponse de cs_MAURICIO
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
0
Merci
Salut,

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

Il nous faut le fameux "Traitement"


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
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. ^ ^
Commenter la réponse de Caribensila
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
0
Merci
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
Commenter la réponse de PhilLu
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
0
Merci
@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.
Commenter la réponse de cs_MAURICIO
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
0
Merci
@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]
Commenter la réponse de Cirec
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
Commenter la réponse de cs_MAURICIO
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
0
Merci
Ben la première solution, c'est pas mieux, et avec la seconde (TEncoding.Unicode), j'obtiens ça:
㌠㈰‱㩰〲㌱‰删ㄨऩ䕛呏⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㐸‰㩰〲㌱‰删ㄨऩ䕛兎⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㜠㔸′㩰〲㌱‰圠ㄨऩ䅛䭃⁝倊假䑟䵅㈠㄰〳㈳‵㌲㠴〰㠠㐲‹㩰〲㌱‰删㔨⤰嬉呓嵘䠱屼♞籼䡼獯年⸱〰籼籼籼偼ㅼ㉼㄰〳㈳㈵㐳㐲嬸剃孝呅嵘㡂䍛嵒䱛嵆ਠ䝐彐䕄⁍〲㌱㌰

:-(
Commenter la réponse de PhilLu
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
0
Merci
ben zut, chez moi c'était du chinois!!!
Commenter la réponse de PhilLu
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
0
Merci
peux tu nous fournir une copie du fichier en question afin de pouvoir tester ?



[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Dernière intervention
6 mai 2018
0
Merci
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?
Commenter la réponse de PhilLu
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
0
Merci
Si le fichier raccourci provoque aussi l'erreur alors tu peux le déposer ici
dans un zip peut être


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Messages postés
4
Date d'inscription
mercredi 4 janvier 2006
Dernière intervention
25 août 2013
0
Merci
et quelle est la solution retenue ?

--
Commenter la réponse de SergeItIsMe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.