Ajuda com Código Preciso pegar os estados separados por virgula e colocar cada um em uma posição diferente dentro de um Stringlist.

28/04/2017

0

Bom dia,

Pessoal eu precisaria que a hora em que o usuário digitasse em em Edit vários estados separados por virgula, cada estado fosse armazenado em uma posição de um StringList,

segue abaixo como estou fazendo, quando debugo apertando F8 o erro de Acess Violation acontece na hora em que eu tento imprimir a StringList, acredito que o problema esta na maneira como estou atribuindo a função que retorna o estringlist preenchido para outra variável do mesmo tipo.
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function fRetornaUFporVirgula(prUFScomVirgula : String):TStringList;
var
  Form1: TForm1;

implementation

{$R *.dfm}

function fRetornaUFporVirgula(prUFScomVirgula : String):TStringList;
var
  wUFS: TStringList;
  wCopia: integer;
  wCont : integer;
  wTexto : string;
begin
  prUFScomVirgula := StringReplace(prUFScomVirgula, ' ', EmptyStr, [rfReplaceAll]);
  wCont := 1;
  wCopia := wCont;
  wUFS := TStringList.Create;
  while (wCont <= Length(prUFScomVirgula)) do
     begin
       if (copy(prUFScomVirgula,wCont,1)=',') or (wCont = Length(prUFScomVirgula)) then
          begin
            wTexto := copy(prUFScomVirgula,wCopia,wCont-1);
            wUFS.add(wTexto);
            wCopia := wCont + 1;
          end;
       inc(wCont);
     end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wCont : integer;
  wVarriavel:TStringList;
begin
  wVarriavel := fRetornaUFporVirgula(Edit1.Text);
  for wCont := 0 to wVarriavel.Count-1 do
     Label1.Caption := Label1.Caption + wVarriavel.Strings[wCont] + #13;
end;

end.
Willian Alberto

Willian Alberto

Responder

Post mais votado

28/04/2017

Bom dia Willian,
Acredito que se utilizar a função a seguir vai ficar mais fácil.

sl := TStringList.Create;
s := 'PR,MT,MS';
sl.Delimiter := ',';
sl.DelimitedText := s;
ShowMessage(sl[1]);

aí você faz um for nas linhas de sua stringlist e passa linha por linha (se houver mais de uma) pegando o texto dela e delimitando pelo caracter. Com isso no stringlist que cria em memoria vai separar por linhas cada registro.


Espero ter ajudado.

Jeferson Kochen

Jeferson Kochen
Responder

Mais Posts

28/04/2017

Willian Alberto

Bom dia Jackson,

Resposta muito top, resumiu muito o código e simplificou bastante, valeu mesmo me ajudou muito, eu desconhecia essa função Delimited do StringList, obrigado mesmo, forte abraço!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar