Ir para conteúdo
Fórum Script Brasil
  • 0

Selecionando Partes De Uma String


Zolhos

Pergunta

como eu faço para que uma variável receba como valor apenas um pedaço de uma string? (por exemplo, fazer uma variável receber o terceiro, o quarto e o quinto caracteres de uma string...)

exemplificando mais:

vamos supor que exista uma string assim:

045-12/08/2004

como eu faço para fazer uma variável receber o valor dos 3 primeiros caracteres?

como eu faço para fazer uma variável receber o valor do quarto e do quinto caracter?

outro tipo de pergunta?

como eu faço para fazer uma variável receber os valores que vêm antes do TRAÇO ( - )?

como eu faço para fazer uma variável receber os valores que estão entre o traço e a primeira barra?

melhor seria se vocês me respondessem as duas últimas perguntas =p

muito obrigado!

t+

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá,

Eu fiz um exemplo para você. Baixe-o em http://www.capablanca.com.br/download/resp...l/25_string.zip

O código da Unidade é:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btn_p1: TButton;
    btn_p2: TButton;
    btn_p3: TButton;
    btn_p4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure btn_p1Click(Sender: TObject);
    procedure btn_p2Click(Sender: TObject);
    procedure btn_p3Click(Sender: TObject);
    procedure btn_p4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  texto, p1, p2, p3, p4: string;


implementation

{$R *.dfm}

procedure TForm1.btn_p1Click(Sender: TObject);
begin
  p1:= copy(Edit1.Text, 1, 3);
  Edit2.Text:= p1;
end;

procedure TForm1.btn_p2Click(Sender: TObject);
begin
  p2:= copy(Edit1.Text, 4, 2);
  Edit3.Text:= p2;
end;

procedure TForm1.btn_p3Click(Sender: TObject);
begin
  p3:= copy(Edit1.Text, 1, 3);
  Edit4.Text:= p3;
end;

procedure TForm1.btn_p4Click(Sender: TObject);
begin
  p4:= copy(Edit1.Text, 5, 10);
  Edit5.Text:= p4;
end;

end.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

VALEU PESSOAU!

capablanca não deu pra abrir o seu arquivo (muito provavelmente por causa q eu uso delphi3) mas eu vi o q você digitou e testei e deu certo =D só q depois, na hora de fazer o q eu queria eu não conseguir usar o jeito q você fez =/

eu também tinha pedido o código pra mostrar todas as letras de uma palavra até o traço, aqui vai o código que eu consegui fazer....

se alguém puder deixá-lo MENOR eu agradeceria muito!

ps: na hora de implementar isso MUITO CUIDADO porque se você não digitar um traço no edit1.text você vai criar um LOOPING INFINITO

procedure TForm1.btn_p1Click(Sender: TObject);
var
i : integer;
editUm, letra, palavra : string;

begin
i := 1;
editUm := edit1.text;
while not (letra = '-') do
begin
palavra := palavra + letra;
letra := (editUm[i]);
i := i + 1;
end;
edit2.text := palavra;
end;

q ceis axam?

tem com inxuar isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Gostei do seu código. Se o conteúdo do EDIT1 seguir a mesma estrutura (ou seja, três números, depois um hífen, etc.), você pode utilizar a minha sugestão que funciona perfeitamente. No entanto, se a posição do hífen variar, utilize o seu código.

Quanto à enxugar o seu código, eu só tiraria a variável EditUm, de modo que ficaria assim:

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
letra, palavra : string;

begin
i := 1;
while not (letra = '-') do
begin
palavra := palavra + letra;
letra := (Edit1.Text[i]);
i := i + 1;
end;
edit2.text := palavra;
end;
Talvez você não tenha conseguido fazer o que queria através do meu código, por não entender o funcionamento da função COPY. A função COPY permite que se copie um "pedaço" de uma string. Veja este exemplo:
procedure TForm1.Button1Click(Sender: TObject);
var
palavra_inteira, trecho_copiado: string;
begin
palavra_inteira:= 'borland';
trecho_copiado:= copy(palavra_inteira, 4, 3);
ShowMessage(trecho_copiado);
end;

O número "4" é a localização do primeiro caractere a ser copiado da esquerda para a direita. O número "3" é a quantidade de caracteres a serem copiados a partir do primeiro caractere informado (no nosso caso, "4"). Desta forma, a variável trecho_copiado irá copiar os 3 primeiros caracteres a partir do 4º caractere contido na variável palavra_inteira (no caso, serão contados 3 caracteres a partir da letra "l", resultando na palavra "lan").

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0
Gostei do seu código. Se o conteúdo do EDIT1 seguir a mesma estrutura (ou seja, três números, depois um hífen, etc.), você pode utilizar a minha sugestão que funciona perfeitamente. No entanto, se a posição do hífen variar, utilize o seu código.

Quanto à enxugar o seu código, eu só tiraria a variável EditUm, de modo que ficaria assim:

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
letra, palavra : string;

begin
i := 1;
while not (letra = '-') do
begin
palavra := palavra + letra;
letra := (Edit1.Text[i]);
i := i + 1;
end;
edit2.text := palavra;
end;
Talvez você não tenha conseguido fazer o que queria através do meu código, por não entender o funcionamento da função COPY. A função COPY permite que se copie um "pedaço" de uma string. Veja este exemplo:
procedure TForm1.Button1Click(Sender: TObject);
var
palavra_inteira, trecho_copiado: string;
begin
palavra_inteira:= 'borland';
trecho_copiado:= copy(palavra_inteira, 4, 3);
ShowMessage(trecho_copiado);
end;

O número "4" é a localização do primeiro caractere a ser copiado da esquerda para a direita. O número "3" é a quantidade de caracteres a serem copiados a partir do primeiro caractere informado (no nosso caso, "4"). Desta forma, a variável trecho_copiado irá copiar os 3 primeiros caracteres a partir do 4º caractere contido na variável palavra_inteira (no caso, serão contados 3 caracteres a partir da letra "l", resultando na palavra "lan").

Abs.

AHNnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

agora eu entendi a funcao copy!

mas vai ser variável o número de letras antes do traço =C

e realmente agora eu fui testar e sem a variável "editUm" tá dando certo, mas ontem eu tentei e não deu =p axo q fiz algo errado hehehe

valeu pessoau!

o meu estilo de texto q tem será:

1234-12/08/2004

to agora tentando trabalhar pegando só os outros elementos

tava pensando agora em transformá-los em uma data e usar aquele comando decodedate =D

mas isso eu ainda vou testar

caso eu tenho dúvidas eu posto aqui....

a propósito hehe leiam o meu outro post (q vou escrever agora)

Link para o comentário
Compartilhar em outros sites

  • 0

PROBLEMAS DE NOVO (diabos!)

tem como ver quantos caracteres uma string tem?

(por exemplo: a string 1234-56/78/9012 tem 15 caracteres)

EDIT:

ae deu certo!!!!

mas mesmo assim me respondam a pergunta anterior por favor =D

e eu também gostaria de saber uma coisa que eu coloquei nesse arquivo mas não sei pra que serve =p

como funcionam as variáveis WORD? q tipod e variável é isso?

aqui vai o código fonte pra vocês verem =P

depois vou implementar isso no meu sistema e vai ser tudo beleza =D

ps: tem como diminuir o código MAIS ainda?

unit uniAplicacaoNoProjeto;

interface

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

type
  TForm2 = class(TForm)
    btnCalcular: TButton;
    MaskEdit1: TMaskEdit;
    MaskEdit2: TMaskEdit;
    btnPreencher: TButton;
    MaskEdit3: TMaskEdit;
    MaskEdit4: TMaskEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    MaskEdit5: TMaskEdit;
    Label5: TLabel;
    MaskEdit6: TMaskEdit;
    Label6: TLabel;
    procedure btnCalcularClick(Sender: TObject);
    procedure btnPreencherClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.btnCalcularClick(Sender: TObject);
var
i, j : integer;{contadores}
letra, palavra, codigo : string;
data : tDateTime;
ano, mes, dia : word;
begin
i := 1;
while not (letra = '-') do
begin
codigo := codigo + letra;
letra := (maskedit1.text[i]);
i := i + 1;
end;
{chegamos no traço}
letra := (maskedit1.text[i]);
i := i + 1;
{1 caractere após o traço}
j := 1;
while not (j > 10) do
begin
palavra := palavra + letra;
letra := (maskedit1.text[i]);
i := i + 1;
j := j + 1;
end;
data := strToDate(palavra);
maskedit2.text := dateToStr(data);
maskedit3.text := codigo;
decodeDate(data, ano, mes, dia);
maskedit4.text := intToStr(dia);
maskedit5.text := intToStr(mes);
maskedit6.text := intToStr(ano);
end;

procedure TForm2.btnPreencherClick(Sender: TObject);
begin
maskedit1.text := '1234-27/12/2004';
end;

end.

Editado por Zolhos
Link para o comentário
Compartilhar em outros sites

  • 0

Olá,

Evite criar um POST dentro do mesmo cool.gif

Para retornar o tamanho da string você pode usar a função LENGTH.

Exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
texto: string;
tamanho: integer;
begin
texto:= '1234-56/78/9012';
tamanho:= length(texto);
ShowMessage('O tamanho da string é: ' + IntToStr(tamanho));
end;

Talvez tenha algum erro de digitação pois estou sem o Delphi no momento.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0
Olá,

Evite criar um POST dentro do mesmo cool.gif

Para retornar o tamanho da string você pode usar a função LENGTH.

Exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
texto: string;
tamanho: integer;
begin
texto:= '1234-56/78/9012';
tamanho:= length(texto);
ShowMessage('O tamanho da string é: ' + IntToStr(tamanho));
end;

Talvez tenha algum erro de digitação pois estou sem o Delphi no momento.

Abs.

nossa valeu isso facilita MUYTO as coisas!

tkz!

e as variáveis tipo WORD como funcionam e pra q servem? eu usei (porque copiei do HELP do delphi) mas não intendi pra q servem =/

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...