Traitement chaîne de caractère

Résolu/Fermé
ameno_123 Messages postés 11 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 janvier 2013 - 16 janv. 2013 à 13:08
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 16 janv. 2013 à 18:49
Bonjour,
Je veux traiter un fichier txt comme suite :
le contenu du fichier :
Citation:
France 978EUR000000100000000000077918000001108361 0000000000000000000000001212
French Guiana 978EUR000000100000000000077918000001108361 0000000000000000000000001212
French Polynesia 953XPF000011933170000009298132000000009288 0000000000000000000000001212

Ce que je veux est simple mais je bloque!!
1) Par exemple pour: 978EUR000000100000000000077918000001108361 je dois prendre les 7 derniers chiffres 1108361 pour les diviser/10 000 pour avoir = 110.8361 et ainsi de suite..
2) Prendre le code devise, du 4ème au 6ème caractère de la trame.
3) Mettre tous cela dans un fichier csv

Merci pour l'aide

11 réponses

dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
16 janv. 2013 à 17:30
Salut
Dans l'exemple que tu donnes tu faire comme cela :

procedure Acquisition;
var List,LCSV: TstringList;
     i,idx:integer;
     chaine,champ:string;
     devise,valeur:string;
begin
  LIST := TStringList.create;
  LCSV := TStringList.create;
  LIST.loadfromfile('tonsource.dat');  // nom à adapter !!
  for i:=0 to LIST.count-1 do
    begin
      chaine := LIST[i];
      repeat
        idx := pos(' ',chaine);
        champ := trim(copy(chaine,1,idx));
        chaine := trim(copy,chaine,idx,999)):
      until length(champ>35);
      devise := copy(champ,3,3);
      valeur := copy(champ,lenght(champ)-6,5) 
              + '.' 
              + copy(champ,lenght(champ)-1,2);
      LCSV.add(devise + ';' + valeur);
    end;
  LCSV.savetofile('result.csv');
  LCSV.free;
  List.free;
end;


Je n'est pas resté, mais çà devrait pas être trop buggé

Dubois77
site perso
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 janv. 2013 à 15:08
Bonjour,

Pas facile de se repérer car la taille et le format des lignes change..
As-tu la possibilité de modifier la création de ce fichier ?

cantador
0
ameno_123 Messages postés 11 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 janvier 2013
16 janv. 2013 à 16:57
Malheureusement non
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
16 janv. 2013 à 17:17
Salut,

il faut lire chaque ligne de texte depuis la fin et découper les éléments un à un!
Pour cela, tu peux faire un for:


ligne := "French Polynesia 953XPF000011933170000009298132000000009288 0000000000000000000000001212 ";

for i := length(ligne) downto 1 do 
begin
  ici, tu coupe de dernier caractère et tu le colles dans l' élement actuel (tu dois faire la gestion de l' élément actuel qui change lorsque tu as un espace) ... 
end; 



a+


Composants Cindy pour Delphi
Faites une donation.
0

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

Posez votre question
ameno_123 Messages postés 11 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 janvier 2013
16 janv. 2013 à 18:10
Merci bcp, mais la compilation s’arrête sur la ligne ( until length(champ>35); )!!
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
16 janv. 2013 à 18:15
oui sur la ligne juste avant il faut mettre un ; au lieu de : !!!


Dubois77
site perso
0
ameno_123 Messages postés 11 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 janvier 2013
16 janv. 2013 à 18:21
deja corrigé , il me ressort ( [DCC Erreur] Unit2.pas(59): E2010 Types incompatibles : 'string' et 'Integer' )
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
16 janv. 2013 à 18:23
until length(champ)>35;


Dubois77
site perso
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
16 janv. 2013 à 18:24
c'est ce qui se passe quand on ne teste pas !
erreurs de frappe !!


Dubois77
site perso
0
ameno_123 Messages postés 11 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 16 janvier 2013
16 janv. 2013 à 18:35
Marche bien sauf que j'ai en output :

6GB 13755.74
0US 08636.13
1AF 00174.46
8AL 00079.38
2DZ 00108.07
0US 08636.13

alors que je dois avoir :

United Kingdom GBP 13.75574
United States USD 8.63613
Afghanistan.. AFN 0.17446
Albania ALL 0.07938
Algeria DZD 0.10807
American Samoa USD 8.63613
Angola. AOA 0.09037
Anguilla. XCD 3.19856
Antigua, Barbuda. XCD 3.19856
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
16 janv. 2013 à 18:49
Il ne suffit pas de faire du copier/coller du code donné par les membres en nous remontant les erreurs, c' est à toi de corriger les éventuels bugs et logique de fonctionnement!

a+


Composants Cindy pour Delphi
Faites une donation.
0
Rejoignez-nous