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

Após ler um txt, indentificar palavras e depois separar cada letrinha.


Guest SurfingBoy

Pergunta

Guest SurfingBoy

Amigos, Boa noite a todos...

Estou tendo um probleminha com um sistema, preciso fazer a leitura de um .txt (isso já foi feito) depois de coloca-lo em um Memo (já foi feito), preciso de uma rotina para primeiro separar cada palavra dentro de uma váriavel (separa-las pelo espaço), depois separar cada letrinha das palavras dentro de variavel equivalentes as palavras do texto, pois preciso passar a maquina de Moore, para gerar os tokens...

exemplo:

Select *

From professores

Where prof_sal < 1000

então o que estou fazendo no delphi...

1º - lendo o arquivo txt

2º - jogando para uma váriavel "ArquivoTexto" e para um Memo para visualização do usuário.

3º - quero separar cada palavra do texto dentro de uma variável, ex:

palavra01.text := select

palavra02.text := *

palavra03.text := from

etc...

4º - preciso separar cada palavras em conjunto de letrinhas, ex:

palavra01_letra01.text := s

palavra01_letra02.text := e

palavra01_letra03.text := l

palavra01_letra04.text := e

palavra01_letra05.text := c

palavra01_letra06.text := t

5º - Passar isso pela maquina de moore, para poder indentificar os Tokens

Desde já muito grato!

Link para o comentário
Compartilhar em outros sites

23 respostass a esta questão

Posts Recomendados

  • 0
Estou tendo um probleminha com um sistema, preciso fazer a leitura de um .txt (isso já foi feito) depois de coloca-lo em um Memo (já foi feito), preciso de uma rotina para primeiro separar cada palavra dentro de uma váriavel (separa-las pelo espaço), depois separar cada letrinha das palavras dentro de variavel equivalentes as palavras do texto, pois preciso passar a maquina de Moore, para gerar os tokens...

Modifique o codigo para o seu uso

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  palavras : array[1..500] of string;    // definir 500 palavras
  letras : array[1..1000] of Char;       // definir 1000 caracteres
  x, z : integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var S: string;  i, n , y : integer;
begin
  x := 0;
  z := 0;
  S := memo1.Lines.Text;
  while Pos(' ', S) > 0 do
     begin
        x := x + 1;
        palavras[x] := copy(s,1,Pos(' ', S)); // SEPARAR AS PALAVRAS
        S[Pos(' ', S)] := '#';
        delete(S,1,Pos('#', S));
        //showmessage(s);

        n := Length(trim(palavras[x]));
        Edit1.Text := trim(palavras[x]);

        for i := 1 to n do
           begin
              z := z + 1;
              letras[z] := Edit1.text[i];  // SEPARA AS LETRAS DAS PALAVRAS
              showmessage(letras[z]);
           end;
     end;

     // PEGAR A ULTIMA PALAVRA DO TEXTO

     n := Length(trim(palavras[x]));

     x := x + 1;
     palavras[x] := copy(s,1,n); // SEPARAR A ULTIMA PALAVRAS

     delete(S,1,n);

     Edit1.Text := trim(palavras[x]);

     for i := 1 to n do
        begin
           z := z + 1;
           letras[z] := Edit1.text[i]; // SEPARA AS LETRAS DA PALAVRA FINAL
           showmessage(letras[z]);
        end;

end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  palavras : array[1..500] of string;    // definir 500 palavras
  letras : array[1..1000] of Char;       // definir 1000 caracteres
  x, z : integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var S: string;  i, n , y : integer;
begin
  x := 0;
  z := 0;
  S := memo1.Lines.Text;
  while Pos(' ', S) > 0 do
     begin
        x := x + 1;
        palavras[x] := copy(s,1,Pos(' ', S)); // SEPARAR AS PALAVRAS
        S[Pos(' ', S)] := '#';
        delete(S,1,Pos('#', S));
        //showmessage(s);

        n := Length(trim(palavras[x]));
        Edit1.Text := trim(palavras[x]);

        for i := 1 to n do
           begin
              z := z + 1;
              letras[z] := Edit1.text[i];  // SEPARA AS LETRAS DAS PALAVRAS
              showmessage(letras[z]);
           end;
     end;

     // PEGAR A ULTIMA PALAVRA DO TEXTO

     n := Length(trim(palavras[x]));

     x := x + 1;
     palavras[x] := copy(s,1,n); // SEPARAR A ULTIMA PALAVRAS

     delete(S,1,n);

     Edit1.Text := trim(palavras[x]);

     for i := 1 to n do
        begin
           z := z + 1;
           letras[z] := Edit1.text[i]; // SEPARA AS LETRAS DA PALAVRA FINAL
           showmessage(letras[z]);
        end;

end;

end.

abraço

Como fazer para separar somente as palavras e jogar a primeira palavra no edit1, depois apertar um button ai ele joga a próxima palavra no edit1, até que não reste mais palavras?

Link para o comentário
Compartilhar em outros sites

  • 0
Como fazer para separar somente as palavras e jogar a primeira palavra no edit1, depois apertar um button ai ele joga a próxima palavra no edit1, até que não reste mais palavras?

É só fazer essa modificação no código

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  palavras : array[1..500] of string;    // definir 500 palavras
  letras : array[1..1000] of Char;       // definir 1000 caracteres
  Z : integer;
  X : integer = 0;
  S : string;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var  i, n , y : integer;
begin

  IF Pos(' ', S) > 0 THEN
     BEGIN
        x := x + 1;
        palavras[x] := copy(s,1,Pos(' ', S)); // SEPARAR AS PALAVRAS
        S[Pos(' ', S)] := '#';
        delete(S,1,Pos('#', S));

        n := Length(trim(palavras[x]));
        Edit1.Text := trim(palavras[x]);

     END
  ELSE
     BEGIN

        // PEGAR A ULTIMA PALAVRA DO TEXTO

        n := Length(trim(s));

        x := x + 1;
        palavras[x] := copy(s,3,n); // SEPARAR A ULTIMA PALAVRAS

        delete(S,1,n);

        Edit1.Text := trim(palavras[x]);
     END;

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   S := memo1.Lines.Text;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá jhonnas, vou utilizar este tópico pois se trata de quase o mesmo assunto.

Tenho um form que joga o corpo da página da internet para um memo.

Aqui vai o que esta escrito em meu memo:

RGNome

222222222-2GIOROT

BancoCódigo do Banco

REAL 123456

descriçãoValor

descriçãoaqui2.000,00

valor1valor2valor3

2.000,00242,622.581,48

preciso que fiquem separados como

rg - 2222222222-2

nome giorot

banco real

código 123456

descrição - descriçãoaqui

valor -2.500.00

valor1 - 2.000,00

valor2 - 242,62

valor3 - 2.581,48

não sei como separar os dados, mas sei que na linha 2, 4 e 6 posso separar os numeros das letras (só não sei como) e na ultima linha poderia talvez separar cada numero pegando eles 2 casas apos a ultima virgula.

alguma ajuda?

Link para o comentário
Compartilhar em outros sites

  • 0

sim, já pensei em como separar os valores

Na linha 4 e 6 jogaria todos os caracteres de palavras em um edit e os que possuem numeros em outra, conseguindo assim separar estes valores.

Na ultima linha possuo 3 valores que podem variar a quantidade ( de 2000,00 para 20000,00 por exemplo) poderia separar cada valor varrendo o memo e pegando 2 valores alem da virgula para cada um dos valores.

Porém sou novo em delphi e tudo é muito novo, não sei realmente como aplicar essas mudanças em seu exemplo.

Não queria pedir muito, mas caso seja possivel me mostrar um exemplo de cada uma das 2 opções, ou me der uma luz no que fazer.

Obrigado mais um vez.

Link para o comentário
Compartilhar em outros sites

  • 0

exemplo para pegar os valores

2.000,00242,622.581,48

imagine que tenha somente essa linha no memo

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  s : string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, X , n : integer;
begin

  x := 0;
  IF Pos(',', S) > 0 THEN
     BEGIN
        x := x + 1;
        valores[x] := copy(s,1,Pos(',', S)+2); // SEPARAR OS VALORES
        S[Pos(',', S)] := '#';
        delete(S,1,Pos('#', S)+2);

        n := Length(trim(valores[x]));
        Edit1.Text := trim(valores[x]);

     END

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   S := memo1.Lines.Text;
end;

end.

o resultado a cada clik do botão no Edit1 seria

2.000,00

242,62

2.581,48

para os outros valores segue-se a mesma idéia

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

olá jhonas o exemplo funcionou bem mas me ocorreu um problema.

Meu programa consiste em pegar dados de uma tabela jogar em um formulario da web, receber informações deste site e puxar para o memo.

Só que dependendo do cliente o memo apresenta mais linhas ou menos linhas.

por exemplo:

BancoCódigo do Banco

REAL 123456

descriçãoValor

descriçãoaqui2.000,00

descrição2aqui2.200,00

descrição3aqui2.000,00

valor1valor2valor3

2.000,00242,622.581,48

1ªpergunta

exitem somente 3 tipos de descições, a descriçãoaqui a descrição2aqui e a descrição3aqui como faço para o sistema reconhecer cada uma destas pela ordem que esta aparecendo e jogar em seus tedits respectivos.

exemplo: if (achar a descriçãoaqui) ou (descrição2aqui) ou (descrição3aqui) then

copiar os numeros a seguir nesta linha e partir para a proxima até acabar as linhas que começam com tais descrições?

e como copiar também esta descrições escritas em tedits?

2ªpergunta

Como o numero de linhas nem sempre é o mesmo teria como fazer para ele ler os valores tomando como referência a linha de cima? por exemplo:

a ultima linha 2.000,00242,622.581,48 nunca estará na ultima linha mas eu sei q ela sempre estará embaixa da linha valor1valor2valor3 tem como fazer para copiar os valores tomando como referência a linha de cima?

só me falta isso para completar esse capitulo do memo.

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

  • 0

como eu disse é uma variação do código que voce vai usar ...

se os valores do memo forem

descriçãoaqui2.000,00

descrição2aqui2.200,00

descrição3aqui2.000,00

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  palavras : array[1..10] of string;
  s : string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, X , n : integer;
begin
  x := 0;

  for i := 0 to Memo1.Lines.Count-1 do
  begin
  s := Memo1.Lines.Strings[i];

  IF Pos(',', S) > 0 THEN
     BEGIN
        x := x + 1;
        palavras[x] := copy(s,1,Pos('aqui', S)+3);
        delete(S,1,Pos('aqui', S)+3);

        valores[x] := copy(s,1,Pos(',', S)+2); // SEPARAR OS VALORES

        case x of
        1 : begin
               edit1.text := palavras[x];
               edit2.text := valores[x]
            end;
        2 : begin
               edit3.text := palavras[x];
               edit4.text := valores[x]
            end;
        3 : begin
               edit5.text := palavras[x];
               edit6.text := valores[x]
            end;
        end;
     END;
  end;
end;

end.

o resultado seria

edit1 = descriçãoaqui_______edit2 = 2.000,00

edit3 = descriçãoaqui2______edit3 = 2.200,00

edit5 = descriçãoaqui3______edit6 = 2.000,00

voce tem que tentar fazer sozinho agora .. ok ?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

bom, tentei adicionar mas não foi, o problema insiste talvez eu esteja fazendo alguma coisa impossivel

Meu Memo:

BancoCódigo do Banco

REAL 123456

descriçãoValor

descriçãoaqui2.000,00

outrainformação2.200,00

qualquercoisa2.000,00

maisuma345,00

. //dependendo do cliente pode ter mais ou menos linhas aqui com descrição diferente mas dentro de uma lista, no max 6.

.

.

valor1valor2valor3

2.000,00242,622.581,48

vou postar meu code:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  palavras : array[1..10] of string;
  banco : string;
  s : string;
  t : string;

const
  d : array[1..17] of string = ('qualquercoisa', 'descriçãoaqui', 'outrainformação', 'maisuma', 'todasdiferente'); // aqui tentei listar as possiveis descrições de crédito

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, j, X , n : integer;

begin
  x := 0;
  for i := 0 to Memo1.Lines.Count-1 do
  for j := 0 to Memo1.Lines.Count+1 do //aqui tentei fazer de 1 jeito para pegar a linha seguinta da posição encontrada
  begin
  t := Memo1.Lines.Strings[j];
  s := Memo1.Lines.Strings[i];
  x := 0;

  IF Pos('Bancocodigo', S) > 0 THEN
  begin
        banco := copy(Memo1.Lines.Strings[2],1,0); // Pegar o Banco já que ele esta em uma mesma linha sempre.
        edit1.text := banco;

  IF Pos('valor1valor2valor3', S) > 0 THEN // aqui é o seu código de pegar valores após a virgula com a diferença de pegar 1 linha depois da posição.
  begin
        x := x + 1;
        valores[x] := copy(t,1,Pos(',', S)+2); // pegar valor bruto
        S[Pos(',', S)] := '#';
        delete(S,1,Pos('#', S)+2);

        case x of
        1 : begin
               edit2.text := valores[x];
             end;
        2 : begin
               edit3.text := valores[x];
             end;
        3 : begin
               edit4.text := valores[x]
            end;

  IF Pos('d', S) > 0 THEN //aqui ele procura um dos valores listados la em cima.
     begin
        x := x + 1;
        palavras[x] := copy(s,1,Pos('d', S)+3); // pega a palavra encontrada
        delete(S,1,Pos('d', S)+3);

        valores[x] := copy(s,1,Pos(',', S)+2); // pegar valor do lado da palavra
        case x of
        1 : begin
               edit5.text := palavras[x];
               edit6.text := valores[x]
            end;
        2 : begin
               edit7.text := palavras[x];
               edit8.text := valores[x]
            end;
        3 : begin
               edit9.text := palavras[x];
               edit10.text := valores[x]
            end;
        4 : begin
               edit11.text := palavras[x];
               edit12.text := valores[x]
            end;
        5 : begin
               edit13.text := palavras[x];
               edit14.text := valores[x]
            end;
        6 : begin
               edit15.text := palavras[x];
               edit16.text := valores[x]
            end;
         end;
         end; <<< [Error] Unit1.pas(121): Constant expression expected
         end; 
         end;
         end;
         end;
         end;
         end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Não vou te dar tudo mastigado, mas voce pode comparar o seu código com este e ver o que estava fazendo de errado

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  palavras : array[1..10] of string;
  banco : string;
  s : string;
  t : string;

const
  d : array[0..5] of string = ('qualquercoisa', 'descriçãoaqui', 'outrainformação', 'maisuma', 'todasdiferente', 'valor1valor2valor3'); // aqui tentei listar as possiveis descrições de crédito

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, j, X , n, k : integer;

begin
  x := 0;
  k := 0;
  for i := k to Memo1.Lines.Count-1 do
     begin
        s := Memo1.Lines.Strings[k];

        IF Pos('BancoCódigo', S) > 0 THEN
           begin
               edit1.text := 'BancoCódigo';
               banco := copy(Memo1.Lines.Strings[k+1],1,11); // Pegar o Banco já que ele esta em uma mesma linha sempre.
               edit2.text := banco;
               inc(k);
               inc(k);
               continue;
           end;

        for j := 0 to 5 do // valores de d
           begin

              IF Pos(d[j], S) > 0 THEN
                 begin
                    x := x + 1;
                    palavras[x] := copy(s,1,Pos(d[j], S)+length(d[j])-1); // pega a palavra encontrada
                    delete(S,1,Pos(d[j], S)+length(d[j])-1);
                    valores[x] := s;
                    continue;
                 end;

           end;

        case x of
        1 : begin
               edit3.text := palavras[x];
               edit4.text := valores[x]
            end;
        2 : begin
               edit5.text := palavras[x];
               edit6.text := valores[x]
            end;
        3 : begin
               edit7.text := palavras[x];
               edit8.text := valores[x]
            end;
        4 : begin
               edit9.text := palavras[x];
               edit10.text := valores[x]
            end;
        5 : begin
               edit11.text := palavras[x];
               edit12.text := valores[x]
            end;

        end;

        inc(k);
     end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

beleza :o !

assim eu também aprendo mais. vlw

edit:

Ahh, não sabia que tinha que fazer isto

for j := 0 to 5 do // valores de d
           begin

              IF Pos(d[j], S) > 0 THEN

Já este incremento inc(k) eu nunca tinha visto, mas dei uma lida rapida.

Amanha eu tento adptar, muito obrigado.

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

  • 0

não consegui.. o seu código funciona direitinho, mas quando vou alterar alguma coisa já complica, os edits se misturam todos que aperto o botão e algumas palavras saem cortadas..

tudo acontece quando mexo no ultimo inc (k);

Tirei o valor1valor2valor3 dos valores de 'd' pois não quero que apareça em 1 edit.

Fui colocar o ultimo comando de captura:

IF Pos('valor1valor2valor3', S) > 0 THEN
       BEGIN
        x := x + 1;
        valor[x] := copy(Memo1.Lines.Strings[k+1],1,Pos(',', S)+2); // SEPARAR OS VALORES
        S[Pos(',', S)] := '#';
        delete(S,1,Pos('#', S)+2);
        end;

        case x of
        1 : begin
               edit13.text := valor[x];
             end;
        2 : begin
               edit14.text := valor[x];
             end;
        3 : begin
               edit15.text := valor[x];
               end;

mas não sei se é para colocar antes ou depois daquele ultimo inc (k), tentei dos 2 modos mas ambos confundiram o programa não sei porque, não entendo como aquele ultimo inc influencia tanto.

Se me explicasse o porque do ultimo inc(k) ficaria grato e também como faço para adicionar mais funções dentro deste procedure..

ta difícil.... :unsure:

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

  • 0
Se me explicasse o porque do ultimo inc(k) ficaria grato e também como faço para adicionar mais funções dentro deste procedure..
veja esse comando:

for i := k to Memo1.Lines.Count-1 do

não é a variavel i do for que irá variar e sim o k ... por isso a necessidade de incrementar o valor de k

para poder pegar o valor da linha corrente do memo

s := Memo1.Lines.Strings[k];

se o valor do memo for:

BancoCódigo do Banco

REAL 123456

descriçãoValor

descriçãoaqui2.000,00

outrainformação2.200,00

qualquercoisa2.000,00

maisuma345,00

valor1valor2valor3

2.000,00242,622.581,48

o código abaixo vai separar nos edits os valores

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  palavras : array[1..10] of string;
  banco : string;
  s : string;
  t : string;

const
  d : array[0..5] of string = ('qualquercoisa', 'descriçãoaqui', 'outrainformação', 'maisuma', 'todasdiferente', 'valor1valor2valor3'); // aqui tentei listar as possiveis descrições de crédito

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, j, X , n, k : integer;

begin
  x := 0;
  k := 0;
  for i := k to Memo1.Lines.Count-1 do
     begin
        s := Memo1.Lines.Strings[k];

        IF Pos('BancoCódigo', S) > 0 THEN
           begin
               edit1.text := 'BancoCódigo';
               banco := copy(Memo1.Lines.Strings[k+1],1,11); // Pegar o Banco já que ele esta em uma mesma linha sempre.
               edit2.text := banco;
               inc(k);
               inc(k);
               continue;
           end;

        for j := 0 to 5 do // valores de d
           begin

              IF Pos(d[j], S) > 0 THEN
                 begin
                    x := x + 1;
                    palavras[x] := copy(s,1,Pos(d[j], S)+length(d[j])-1); // pega a palavra encontrada
                    delete(S,1,Pos(d[j], S)+length(d[j])-1);
                    valores[x] := s;
                    //continue;
                 end;

           end;

        case x of
        1 : begin
               edit3.text := palavras[x];
               edit4.text := valores[x]
            end;
        2 : begin
               edit5.text := palavras[x];
               edit6.text := valores[x]
            end;
        3 : begin
               edit7.text := palavras[x];
               edit8.text := valores[x]
            end;
        4 : begin
               edit9.text := palavras[x];
               edit10.text := valores[x]
            end;
        5 : begin
               edit11.text := palavras[x];
               edit12.text := valores[x]
            end;
        end;

        if x >= 5 then
           begin
              while Pos(',', S) > 0 do
                 begin
                    x := x + 1;
                    valores[x] := copy(s,1,Pos(',', S)+2); // SEPARAR OS VALORES
                    S[Pos(',', S)] := '#';
                    delete(S,1,Pos('#', S)+2);

                    case x of
                    6 : edit13.text := valores[x];

                    7 : edit14.text := valores[x];

                    8 : edit15.text := valores[x];
                    end;
                 end;
           end;
        inc(k);
     end;
end;

end.

OBS: Tudo depende de como vai estar o conteudo do memo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, como faço sem embaixo da linha descriçãovalor tiver menos que 5 linhas, ou seja, pode váriar de 1 a 5 de acordo com o cliente.

Pelo fato de no code estar escrito if x >= 5 then o codigo só funciona com os 5 valores, tentei retirar aquilo e fazer de tudo mas só funciona corretamente se tiver 5 campos, tem como caso tenha menos de 5 adicionar um espaço em branco para fazer rodar ou teria alguma solução mais fácil para isto ocorrer?

desculpe pela insistencia

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
tem como caso tenha menos de 5 adicionar um espaço em branco para fazer rodar ou teria alguma solução mais fácil para isto ocorrer?

voce precisa se esforçar mais para aprender lógica de programação

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  valores : array[1..10] of string;
  palavras : array[1..10] of string;
  banco : string;
  s, s1 : string;
  t : string;

const
  d : array[0..5] of string = ('qualquercoisa', 'descriçãoaqui', 'outrainformação', 'maisuma', 'todasdiferente', 'valor1valor2valor3'); // aqui tentei listar as possiveis descrições de crédito

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  i, j, X , n, k : integer;

begin
  x := 0;
  k := 0;
  for i := k to Memo1.Lines.Count-1 do
     begin
        s := Memo1.Lines.Strings[k];
        s1 := s;

        IF Pos('BancoCódigo', S) > 0 THEN
           begin
               edit1.text := 'BancoCódigo';
               banco := copy(Memo1.Lines.Strings[k+1],1,11); // Pegar o Banco já que ele esta em uma mesma linha sempre.
               edit2.text := banco;
               inc(k);
               inc(k);
               continue;
           end;

        for j := 0 to 5 do // valores de d
           begin

              IF Pos(d[j], S) > 0 THEN
                 begin
                    x := x + 1;
                    palavras[x] := copy(s,1,Pos(d[j], S)+length(d[j])-1); // pega a palavra encontrada
                    delete(S,1,Pos(d[j], S)+length(d[j])-1);
                    valores[x] := s;

                    if trim(s1) = 'valor1valor2valor3' then
                       begin
                          inc(k);
                          s1:= Memo1.Lines.Strings[k];
                          while Pos(',', S1) > 0 do
                             begin
                                x := x + 1;
                                valores[x] := copy(s1,1,Pos(',', S1)+2); // SEPARAR OS VALORES
                                S1[Pos(',', S1)] := '#';
                                delete(S1,1,Pos('#', S1)+2);
                             end;
                       end;
                 end;
           end;

        inc(k);
     end;

     for x := 0 to 10 do
        begin
           case x of
           1 : begin
                  edit3.text := palavras[x];
                  edit4.text := valores[x]
               end;
           2 : begin
                  edit5.text := palavras[x];
                  edit6.text := valores[x]
               end;
           3 : begin
                  edit7.text := palavras[x];
                  edit8.text := valores[x]
               end;
           4 : begin
                  edit9.text := palavras[x];
                  edit10.text := valores[x]
               end;
           5 : begin
                  edit11.text := palavras[x];
                  edit12.text := valores[x]
               end;
           6 : begin
                  edit13.text := palavras[x];
                  edit14.text := valores[x]
               end;
           7 : begin
                  edit15.text := palavras[x];
                  edit16.text := valores[x]
               end;
           8 : begin
                  edit17.text := palavras[x];
                  edit18.text := valores[x]
               end;
           end;

        end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Eu tenho um stringgrid com uma planilha do excel (clientes). Preciso fazer a pesquisa por meio de um edit do nome do cliente. Se digitar o nome completo do cliente a pesquisa já dá certo, mas o q preciso é que se eu digitar, por exemplo, apenas uma parte do nome do cliente (exemplo: o nome completo do cliente é: "Meu Cliente Com o Nome Completo", e eu digito apenas: "Meu"), como implemento essa pesquisa?

Obrigado.

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...