moi perso, je m'orienterais vers ce genre de solution :
je découpe la chaîne de base (z) en 3 morceaux (z1,z2,z3)
ensuite je recrée la chaîne finale ( avec format ou autre méthode assez facile à faire)
Principe du découpage :
après lecture de la chaîne à convertir dans z, j'avance l'index n jusqu'à trouver un caractère non numérique et je découpe
puis je recommence jusqu'à trouver un caractère numérique
Le reste constitue la troisième chaîne
//--------------- lecture chaine
readln(fic,z);
//------- découpe 1
n := 1;
while pos(z[n],'0123456789')>0 do n := n + 1;
z1 := copy(z,1,n-1);
z := copy(z,n,length(z));
//------- découpe 2
n := 1;
while pos(z[n],'0123456789')=0 do n := n + 1;
z2 := copy(z,1,n-1);
//------- découpe 1
z3 := copy(z,n,length(z));
ps : c'est de la syntaxe delphi, donc peut être à adapter à ton pascal (free, turbo, je ne sais pas)
3 janv. 2016 à 08:41
var
fic: TextFile;
i: Integer;
Field: TField;
begin
AssignFile(fic, 'D:\DD\FD.txt');
try
Rewrite(fic);
with DD do
try
open;
First;
DisableControls; // eviter de re-peindre l'écran
while not Eof do
begin
for i := 0 to FieldCount - 1 do begin
if i > 0 then Write(fic); // le séparateur un blanc
field := fields[i];
//chaines sur 15 caractères
if field is TStringField then
Write(fic, format('%1.400s', [field.AsString]))
else if field is TIntegerField then
// entiers sur 15 caractères
write(fic, field.asInteger: 1)
else if field is TFloatField then
// réels sur 10 caractères dont 2 décimales
write(fic, field.asFloat: 1: 1)
else if field is TDateTimeField then
write(fic, FormatDateTime('mm-YYYY', field.AsDateTime));
end;
WriteLn(fic);
Next;
end;
finally
EnableControls;
end;
finally
CloseFile(fic);
end;