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