Bonjour a vous

cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012 - 2 févr. 2012 à 11:26
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 11 avril 2012 à 13:15
je voudrai savoir comment faire pour effezctuer une migration de donnée d'un query
vers un fichier txt tt en respectant l'aspect des colonnes du fichier initial
exemple
jeanclaude vandame france
sylvester stalone usa
pelé bresil
leonel messi argentine
david villa espagne




merci d'avance pour votre aide

19 réponses

cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
2 févr. 2012 à 11:32
l'exemple que je viens d'ecrire n'est pas bon
je voudrai que l'espace de la deuxième colonne débute tous au meme endroit malgré que les noms ne se terminent pas au meme endroit.




merçi
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
3 févr. 2012 à 10:54
Bonjour,
Du temps ou je travaillais j'avais écrit une routine qui faisait ça pour renvoyer à l'IBM 36 un fichier txt. Je te laisse faire le formattage du texte de la 1ère colonne pour avoir la 2ème alignées mais StringOfChar devrait faire l'affaire.

procedure TForm1.BtnTxtClick(Sender: TObject);
Var FicTxt: System.Text;
cLigne: String;
Begin
System.Assign(FicTxt, 'c:\temp\Txt.txt');
System.Rewrite(FicTxt); // Création
With Query1 do begin
Active := True;
cLigne := '';
While not Eof do begin
cLigne := FieldByName('Nom').AsString + FieldByName('Pays').AsString;
WriteLn(FicTxt, cLigne);
Next;
End;
End;
System.Close(FicTxt);
end;

pierrot
0
cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
7 févr. 2012 à 15:27
j'ai bien essayer le code que vous m'avez proposer mais malheureusement ça ma donner le meme résultat que celui que j'ai utiliser c'est a dire une confusion entre les colonnes, sous la forme suivante:

jeanclaude vandamfrance
sylverster staloneusa
Pelébrasil
leonel messiargentine
david villaespagne

je voudrai que la colonne pays commence sur le meme point de départ dans le texte c'est à dire le meme ordre.





et merci encore une fois
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
7 févr. 2012 à 16:33
Bonjour,
Relis mon message. Je disait
"Je te laisse faire le formattage du texte de la 1ère colonne pour avoir la 2ème alignées mais StringOfChar devrait faire l'affaire".

Donc à toi d'adapter cLigne pour obtenir le bon résultat. Il faut que chacun travaille un peu.

pierrot
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
8 févr. 2012 à 18:03
cLigne := FieldByName('Nom').AsString + '-' + FieldByName('Pays').AsString;

cantador
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
8 févr. 2012 à 21:08
Bonjour Contador,
Pas tout a fait d'accord avec toi, car dans l'exemple donné le nombres de caractères du champ nom n'est pas constant. Je pense qu'il faut rajouter un certain nombre de blancs après le nom pour que la 2ème colonne (prenom) commence toujours à la même position.
Si le champ nom est sur 30 caractères par exemple

nBlanc = 30 - Length(FieldByname('Nom').AsString;
cLigne := FieldByName('Nom').AsString + StringOfChar(' ', nBlanc) + FieldByName('Pays').AsString;
Je vois le problème de cette façon.
Du temps de Clipper il y avait 2 fonctions Padl et Padr qui faisait ça.
Cordialement
pierrot
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
8 févr. 2012 à 22:52
tu as raison mais le tiret, c'était juste pour donner un peu d'air

Fallait pas lui donner une solution
tout de suite..

Pour traiter correctement le problème, l'idéal serait de mettre en place une procédure paramétrée intégrant la taille des deux champs, évitant le codage en dur.

au lieu d'ajouter des blancs et en se servant
de copy et pos, on y arrive aussi
et plus besoin de StringOfChar..
cantador
0
cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
12 févr. 2012 à 15:53
BOUJOUR merci beaucoup a vous pour l'aide et aussi pour l'orientation vous m’êtes d'un grand secours.
voila qu'un autre problème vient d'apparaitre dons mon petit prg.

j'ai un champ Montant de type real exemple :57286.52 que je dois traduire en txt et qui doit prendre une forme de 13 caractères sous cette forme le meme exemple :"0000005728652"
jusque la c'est bon.
ça coince quant le décimale est un chiffre rond c'est a dire exemple 57286.5 je n'arrive pas à rajouter le "0" au 5 pour que ça rentre dans l'ordre et le chiffre devint "57286.50 et l'écrire en suite "0000005728650" et comme ça je n'aurai pas de décalage dans ma ligne.
comment je devrai m y prendre pour régler ça sous DELPHI.

merci encore pour votre précieux concours.




je ne veux plus etre inscris
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 févr. 2012 à 21:22
je ne veux plus etre inscris

Houlà !

voilà une phrase malheureuse..
Tu as le sentiment d'avoir déjà tout appris et tout donné sur delphi ?

cantador
0
cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
14 févr. 2012 à 09:46
bonjour a vous tous;
Non non non ....cette mention "je ne veux plus etre inscris" est inscrite préalablement sur le petit menu du message chaque fois que j'écris un nouveau message cette mention se place à la fin du récit et j'ai juste oublier de l'effacer avant d'envoyer le message.
vous savez je ne suis qu'un petit parmi les grands et j'ai beaucoup a apprendre surtout de la part d'une équipe comme la votre. cette fois je ne vais pas oublier de l'effacer
j'espère toujours recevoir un coup de pouce de votre part sur ma dernière question ...au plaisir de vous lire

votre dévouer élève jackonil
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
15 févr. 2012 à 17:45
Bonjour,
Utilises la fonction Format %f pour formater le nombre de décimales (à 2 si il y en a au maxi 2) ensuite complète avec les zéros devant.
Il existe un tuto sur la fonction Format. Je ne sais plus ou il se trouve mais avec Google tu devrais trouver facilement.


pierrot
0
cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
15 mars 2012 à 13:40
bonjour a vous
j'espère que tout le monde va bien

ben c'est encore moi et je fait toujours appelle a vous, j'ai bien chercher la solution a mon problème au sujet de formatage "format" j'ai bien appris pas mal d' astuces saut la solution a mon problème qui consiste au rajout d'un 0 au 2eme décimale quant le décimale est un chiffre rend exemple: 24570,4 ,je voudrai avoir à la place 24570,40 en sachant bien sur que mon champ est de type décimale.
en attendant un brin de solution ou orientation merci a vous et au plaisir de vous lire.
a bientot.
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
15 mars 2012 à 21:47
Bonjour,
As tu bien étudié le sujet sur le site que t'as donné Caribensila?
Format(%f) est un spécificateur de précision pour définir le nombre de chiffes après la virgule. A toi de définir combien de chiffres après la virgule tu veux %.2f pour 2 chiffres.
Type supporté réel signé (single, real, real48, double, comp, extended, currency


pierrot
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 mars 2012 à 01:26
« en sachant bien sur que mon champ est de type décimale »


... et en sachant de surcroît faire la différence entre un flottant(24570,4) et un type chaîne(24570,40).

Ce qui ne semble pas être le cas et qui, du coup, se voit orienté vers l'étude des bases du langage car des mots ne remplaceront jamais une bonne compréhension de ce qu'on fait donné par un minimum d'effort.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
16 mars 2012 à 03:03
NON NON NON NON NON NON NON ET NON !

Faut arrêter d'utiliser des formats de texte pourris à la con qui servent a rien que sont le TSV et le SFSV !
(TSV Tab Separated Values, SFSV Space Flood Separated Value)


Go te mettre ton bouzin en QCSV == "","","","","","" -> à lire dans OOCalc ou Excel ou tout tableur qui se respecte, avec un TStringList etc.

Faut arrêter d'utiliser un p****n de bloc note de m***e pour lire "Clairement" des données !

Et demain se sera quoi ? comment transposer une image Gif87a sur les ampoules de l'Eniac ?

var TSL : TStringList;
begin
  TSL := TStringList.Create;
  try
    for X := 0 to ... do
      TSL.Add('"'+Field[0].asString+'","'+Field[1].asString+'"');
    TSL.SaveToFile(...);
  finally
    TSL.Free;
  end;
end;





et pour format il faut faire :

D := Format('%.2f', [24570.4]); // affiche 24570.40



________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
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 mars 2012 à 10:49
procedure TForm1.Button20Click(Sender: TObject);
var
  TSL: TStringList;
  i: integer;

begin
  begin
    TSL := TStringList.Create;
    with query1 do
    try
//      for i := 0 to fields.Count - 1 do
          TSL.Add('"' + Fields[0].asString + '","' + Fields[1].asString + '"');

      TSL.SaveToFile('test');
    finally
      TSL.Free;
    end;
  end;
end;


à adapter en fonction du besoin recherché..
On peut aussi utiliser le nom des champs avec fieldbyName

cantador
0
cs_jackonil Messages postés 7 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 11 avril 2012
11 avril 2012 à 12:17
bonjour a vous tous j'espère tt le monde va bien
voila j'ai un petit problème que j'espère trouver la solution chez votre.
j'ai un fichier sql server dont un champ est de type décimal
length 9 : precision 18 : scal 2
mais quant on fait des calcules avec ce champ meme si scal =2 il prend en charge plusieurs chiffre après la virgule en conséquences cela fosse les résultats que je voudrai obtenir.

je voudrai savoir comment puis je faire pour arrondir le deuxième décimal

exemple : 12674.3765538
avoir a la place : 12674.38

merci a vous tous.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 avril 2012 à 13:12
Bonjour,

il faut aussi tenir des nombres négatifs..
voici un code (un peu ancien) qui marche

on doit pouvoir faire mieux...


function TFAffaire.Arrondir2(VARIAD: Currency): currency;
var
  Point: Integer;
  VARIAT, DEC3: string;
begin
  VARIAT := FloatToStr(VARIAD);
  Point := PosEx(',', VARIAT);
  if Point <> 0 then
  begin
    DEC3 := copy(VARIAT, Point + 3, 1);
    if DEC3 = '' then
    begin
      Result := StrToCurr(VARIAT);
      exit;
    end;
    if (StrToInt(DEC3) >= 0) and (StrToInt(DEC3) <= 4) then
      Result := StrToCurr(copy(VARIAT, 1, Point + 2))
    else
      if VARIAD > 0 then
        Result := StrToCurr(copy(VARIAT, 1, Point + 2)) + 0.01
      else
        Result := StrToCurr(copy(VARIAT, 1, Point + 2)) - 0.01;
  end
  else
    Result := StrToCurr(VARIAT);
end;



cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 avril 2012 à 13:15
@jackonil:

merci de créer un autre post pour des
questions traitant d'un autre sujet.


cantador
0
Rejoignez-nous