Chaine longueur fixe

Résolu
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 30 nov. 2012 à 10:10
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 26 déc. 2012 à 09:08
Bonjour,

A tout hasard, existe-t'il une fonction toute faite qui formate un texte sur x caractères ?
Exemple : si je veux afficher sur 3 caractères dans une liste box, les trois nombres suivants 1, 25 et 330 en leur ajoutant des espaces devant ?
(j'ai fait une fonction maison, mais ne perdons pas une occasion de s'instruire...)

Simon

22 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
30 nov. 2012 à 11:13
la fonction format doit le permettre. Il me semble que Format('%.3d', [25]) doit t'afficher '025'
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
30 nov. 2012 à 12:20
Si, si. Format() te permet de faire ça pour des chaînes.

Et, pour info, il y a aussi FormatFloat() pour les nombres (accepte aussi les entiers).
3
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
30 nov. 2012 à 16:09
Salut,

oui, avec Format, les spécificateurs width et prec sont utilisables, même si le résultat est surprenant avec les chaînes de caractères.

Voici un petit code de démonstration (j'avais un peu de temps à tuer).
Il suffit de placer un Memo et 2 Buttons sur une fiche et de remplir les évènements OnCreate et OnClick sans oublier la procedure GenerateDummyStrings.
Pas besoin de se fatiguer pour la disposition, tout se met en place dans OnCreate (j'avais du temps à tuer, je vous dis...).

{ génération d'une liste de chaînes dont la longueur varie aléatoirement de 1 à Length }
procedure GenerateDummyStrings(const Count: Integer; Strings: TStrings);
const
  Length = 9;
var
  i, j: Integer;
  L: Integer;
  Tmp: string;
begin
  Strings.Clear;
  for i := 1 to Count do
  begin
    L := Random(Length) + 1;
    Tmp := '';
    for j := 1 to L do
    begin
      Tmp := Tmp + (Char(Random(26) + 97));
    end;
    Strings.Add(Tmp);
  end;
end;

{ les chaînes seront alignées à droite, comme des chiffres }
procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
  i: Integer;
begin
  List := TStringList.Create;
  try
    { génération d'une liste de 100 chaînes }
    GenerateDummyStrings(100, List);
    for i := 0 to List.Count - 1 do
    begin
      List[i] := Format('%20.13s', [List[i]]);
    end;
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;

{ les chaînes seront alignées à gauche, c'est plus habituel }
procedure TForm1.Button2Click(Sender: TObject);
var
  List: TStringList;
  i: Integer;
  Inter, W: Integer;
const
  Interval = 20;
begin
  List := TStringList.Create;
  try
    { génération d'une liste de 100 chaînes }
    GenerateDummyStrings(100, List);
    for i := 0 to List.Count - 1 do
    begin
      W := Length(List[i]);
      Inter := Interval + W;
      List[i] := Format('%*.*s', [Inter, W, List[i]]);
    end;
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Width := 533;
  Height := 523;
  with Memo1 do
  begin
    Left := 0;
    Top := 0;
    Width := 385;
    Height := 481;
    Align := alLeft;
    ScrollBars := ssVertical;
    Font.Name := 'Courier New';
    Font.Size := 10;
    Clear;
  end;
  with Button1 do
  begin
    Left := 420;
    Top := 184;
  end;
  with Button2 do
  begin
    Left := 420;
    Top := 228;
  end;
  Randomize;
end;


Avec Delphi, tout devient possible

JP
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 nov. 2012 à 11:21
ok, merci. J'ai bien jeté un oeil au tuto de f0xi sur l'instruction format, mais je ne pensais pas que le ".3" pouvait s'appliquer à des chaines. Je teste ça.


Simon
0

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

Posez votre question
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 nov. 2012 à 12:34
Ok, merci aussi Cari !

Simon
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 nov. 2012 à 16:22
Pas mal !
Merci pour l'idée

Simon
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
30 nov. 2012 à 16:51
« Pas besoin de se fatiguer pour la disposition... »


Ouais...
Mais 'faut quand même Copier/coller.
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
30 nov. 2012 à 21:02
Ouais...
Mais 'faut quand même Copier/coller


No problem...
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 nov. 2012 à 23:19
Excellent !!!
Comment tu fais ça ?


Simon
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
1 déc. 2012 à 14:32
Excellent !!!
Comment tu fais ça ?


Heu... comment je fais quoi ?
Incorporer une image dans le post, tu veux dire ?
Ça le fait, hein ?
Une solution simple est d'uploader l'image sur un serveur dédié, ImageShack par exemple.
C'est gratuit.
Puis tu utilises les outils de mise en page fournis ici dans la barre au-dessus du post pour entrer l'adresse de l'image (adresse fournie par l'hébergeur).
That's all...
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
1 déc. 2012 à 16:01
Ok, ça peut être utile pour des copies d'écran aussi...
Merci pour le truc

Simon
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
1 déc. 2012 à 16:06
Nous, c'est surtout pour les conneries qu'on trouve ça utile...
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
2 déc. 2012 à 14:07
J'avais bien compris Cari !
;)

Simon
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
2 déc. 2012 à 15:04
Moi j'ai rien compris.

Bostik c'est pourtant une marque sérieuse...
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
2 déc. 2012 à 20:12
Simon
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 déc. 2012 à 14:15


«Une solution simple est d'uploader l'image sur un serveur dédié, ImageShack par exemple»


Pour une photo trouvée sur le Net, on peut aussi le faire directement, sans UpLoader :

1) Clic droit sur la photo.
2) Choisir "Propriétés'.
3) Copier l'URL
4) Coller l'URL de l'image dans l'outil de mise en page du post.
5) Héhéhé !
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
3 déc. 2012 à 14:29
Pour une photo trouvée sur le Net, on peut aussi le faire directement, sans UpLoader


Oui, ça s'appelle le hotlink
C'est plutôt à éviter, quoi.

Moi, ce que j'en dis...
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 déc. 2012 à 14:41
J'ai appris un truc, là.

Mais ce que je ne comprends pas c'est qu'il n'y aurait plus de problème en passant par un site dédié comme tu le décris, korgis...
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
3 déc. 2012 à 21:18


Mais ce que je ne comprends pas c'est qu'il n'y aurait plus de problème en passant par un site dédié comme tu le décris, korgis...


Ben justement, c'est que le site est dédié.
C'est étudié pour, quoi...
Je crois savoir qu'ImageShack est le premier à avoir proposé ce service, depuis plusieurs années.
Sans entrer dans le détail du modèle économique, ça semble fonctionner ainsi :
- le service de base est gratuit mais limité,
- si on veut des prestations supplémentaires, c'est payant, diverses formule étant proposées (au mois, à l'année, sauvegardes et autres options "pro" à voir sur le site).
Après, il existe des prestations personnalisées pour les entreprises, certainement aussi des revenus publicitaires etc...
Je n'en sais guère plus.
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
4 déc. 2012 à 08:19
0
Rejoignez-nous