Abordaremos nesta dica, a criação de uma função que retorne uma parte específica de uma string. A função, que chamaremos de SubString, deverá receber os seguintes parâmetros:
- a string original;
- qual parte se deseja retirar da string original, por exemplo, parte 1, parte 2, etc;
- o separador que será utilizado para dividir a string original. Este separador deverá constar na string original, caso contrário o resultado será a string original e não uma parte dela.
SubString('PRIMEIRO SEGUNDO TERCEIRO', 1, ' ') = 'SEGUNDO'
Observações
- Na função SubString, o índice do parâmetro 'Parte' é base-zero, ou seja, Parte = 0 retornará a primeira substring, Parte = 1 retornará a segunda, e assim sucessivamente;
- A função SubString é sensível ao texto, portanto certifique-se de digitar no parâmetro 'Separador', o caractere respeitando o formato da string original, caso contrário o resultado será a string original e não uma parte dela;
- No exemplo acima o separador utilizado é um espaço em branco (#32).
Etapas
Primeira Etapa
Crie um novo projeto e insira no formulário os seguintes componentes da palheta Standard: 4 Edits, 4 Labels e 1 Botão. Monte o Layout do formulário para que fique igual o desenho abaixo. Altere também os Captions dos Labels da seguinte forma:
Label1 = String Original:
Label2 = Parte:
Label3 = Separador:
Label4 = Resultado:
Segunda Etapa
Escreva o código a seguir, de forma que a sua Unit se pareça com o texto abaixo:
unit untSubString;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
edtStringOriginal: TEdit;
edtParte: TEdit;
edtSeparador: TEdit;
edtResultado: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function SubString(Str: string; Parte: integer; Separador: string): string;
var
lp0, sln, CurrN: integer;
EmSep, PrimEncontrado: boolean;
begin
result := '';
CurrN := 0;
EmSep := false;
PrimEncontrado := false;
sln := length(Str);
for lp0 := 1 to sln do
begin
if Pos(Str[lp0],Separador) > 0 then
begin
if not EmSep then
begin
if PrimEncontrado then
inc(CurrN);
end;
EmSep := true;
if CurrN > Parte then
break;
end
else
begin
EmSep := false;
PrimEncontrado := true;
if CurrN = Parte then
result := result + Str[lp0];
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
strOriginal, strSeparador, strResultado: string;
intParte: Integer;
begin
strOriginal := edtStringOriginal.Text;
intParte := StrToInt(edtParte.Text);
strSeparador := edtSeparador.Text;
strResultado := SubString(strOriginal, intParte, strSeparador);
edtResultado.Text := strResultado
end;
end.