Encaixar uma string em uma Lista - Delphi

21/12/2018

10

Bom dia, estou com uma certa dificuldade de resolver um problema, eu preciso encontrar um espaço vago na lista, para encaixar a string.
Exemplo: 'SAVE003'
Lista = ['SAVE001','SAVE002','SAVE004']. Teria que ficar assim Lista = ['SAVE001','SAVE002','SAVE003','SAVE004']. Se alguém puder me ajudar eu agradeço!
Responder

Post mais votado

21/12/2018

E ae Lucas blz cara,

Então você tem muitas formas de fazer isso, a questão é se você conhece a origem do novo valor, caso conheça se for posicional pode usar um objeto do tipo array "StringList cai bem nessa situação", caso não saiba a posição e não queira percorrer os dados pode usar a função "pos" que te retorna a posição de uma string dentro do elemento, fica fácil com "pos" caso o valor não se repita como parece ser o caso no seu exemplo...

Como no seu caso já está no formato de array segue um exemplo com StringList que montei aqui para te ajudar :



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons;

type
  TForm1 = class(TForm)
    cxButton1: TcxButton;
    procedure cxButton1Click(Sender: TObject);
    function completaEsquerda(str:string;x:char;len:integer):string;
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// botão para executar metodo
procedure TForm1.cxButton1Click(Sender: TObject);
var lValores : tstringlist;
    aValores: array [0..3] of string;
    i,nMin,nMax:Smallint;
    cBase:String;
begin
  // exemplo +- parecido com a lista descrita
  aValores[0]:= 'SAVE001';
  aValores[1]:= 'SAVE002';
  aValores[2]:= 'SAVE004';

  cBase:= 'SAVE';// variavel com o nome base

  // pega a primeira posição para saber o menor SAVE
  nMin := StrToInt(copy(aValores[0],5,3));// transforma a string em numero
  nMax:= Length(aValores)-1;
  nMax := StrToInt(copy(aValores[nMax-1],5,3));// transforma a string em numero

  lValores := TStringList.Create;

  // loop do tamanho maximo e minimo
  for i:=nMin to nMax do
    begin
      lValores.Add(cBase+completaEsquerda(IntToStr(i),'0',3));
      ShowMessage(completaEsquerda(IntToStr(i),'0',3));
    end;
  // mostra os valores ajustados
  ShowMessage(lValores.Text);
  lValores.Free;
end;

// fução para preencher valores a esquerda
function TForm1.completaEsquerda(str:string;x:char;len:integer):string;
begin
  // Completa a string com x:char ate ter len tamanho pela esquerda
  str := trim(str);
  while Length(str) < len do
    str := x + str;
  result := str;
end;

end.



Espero que te ajude... Abraço.


Responder

Mais Posts

21/12/2018

Jucélio Silva

só remove essa parte " nMax:= Length(aValores)-1; " era para ver se a posição tava certa do ultimo registro XD...
Responder
Obrigado, deu certo aqui !
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira