Ajuda com Código Preciso pegar os estados separados por virgula e colocar cada um em uma posição diferente dentro de um Stringlist.
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.
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
Curtidas 0
Melhor post
Jeferson Kochen
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.
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.
GOSTEI 1
Mais Respostas
Willian Alberto
28/04/2017
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!
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!
GOSTEI 0