Traitement chaîne de caractère [Résolu/Fermé]

Signaler
Messages postés
11
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 janvier 2013
-
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
-
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

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
12
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
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
Messages postés
11
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 janvier 2013

Malheureusement non
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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.
Messages postés
11
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 janvier 2013

Merci bcp, mais la compilation s’arrête sur la ligne ( until length(champ>35); )!!
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
12
oui sur la ligne juste avant il faut mettre un ; au lieu de : !!!


Dubois77
site perso
Messages postés
11
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 janvier 2013

deja corrigé , il me ressort ( [DCC Erreur] Unit2.pas(59): E2010 Types incompatibles : 'string' et 'Integer' )
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
12
until length(champ)>35;


Dubois77
site perso
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
12
c'est ce qui se passe quand on ne teste pas !
erreurs de frappe !!


Dubois77
site perso
Messages postés
11
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
16 janvier 2013

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
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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.