leitura em campo memo

25/09/2004

0

Pessoal, tenho a seguinte duvida:
Em um dbMemo tenho o seguinte:
20/01/2004#25/02/2004125,3612,001DJOAO ....

Cada campo é separado por . Preciso ler cada campo ate a e gravar numa tabela a parte. Como faço isso? Não tenho a menor ideia.

Em tempo: os campos não tem tamanho fixo e são varios registros. o delimitador tem de ser a .
T+


Marc

Marc

Responder

Posts

25/09/2004

Edilcimar

for i := 0 to memo1.lines.count -1 do
begin
texto := memo1.lines[i]
for j := 0 to length(texto) do
faça o que quizer
end


Responder

25/09/2004

Aroldo Zanela

Colega,

No exemplo abaixo, eu peguei a sua linha de dados e salvei num arquivo texto denominado de TempFile.txt no temp de minha unidade e:. Em seguida, instanciei dois objetos da classe TStringList, a primeira para carregar o arquivo e a segunda para transformar cada linha numa nova lista que em cada linha contém um campo do registro.

TempFile.txt:
20/01/2004#25/02/2004125,3612,001DJOAO


OnClick:
var Arquivo: TStringList;
    Registro: TStringList;
    I, Z: SmallInt;
begin
  Arquivo:= TStringList.Create;
  Registro  := TStringList.Create;

  try

    Arquivo.LoadFromFile(´e:\temp\tempfile.txt´);
    Registro.Delimiter:= ´´;
    Z := Arquivo.Count-1;

    for I := 0 to Z do
    begin
      Registro.DelimitedText:= Arquivo.Strings[I];
      Memo1.Lines.Assign(Registro); // faça aqui a gravação para o banco
    end;

  finally
    Registro.Free;
    Arquivo.Free;
  end;
end;


Resultado exposto num objeto da classe TMemo:
20/01/2004
25/02/2004
125,36
12,00
1
D
JOAO


Sabemos que está não é a rotina de melhor performance, mas é sem dúvida, a de menor esforço.


Responder

25/09/2004

Marc

Agradeco a voces pela a ajuda. Funcionou.
T+


Responder

25/09/2004

Zlink

Senhores

Como irei precisar desta rotina, resolvi testar, e algo não saiu muito bem, exemplo, quando a string tem espaço, o memo escreve na próxima linha:

o delimitador foi o @

Arquivo texto:
@N3BRADESCO @N4JOSE RICARDO HONORIO FERNANDES

Resultado:
N3BRADESCO
N4JOSE
RICARDO
HONORIO
FERNANDES

Como sanar este problema?

Ricardo


Responder

26/09/2004

Zlink

Pessoal, Tem um problema:
Quando a string tem um espaço ex. JOÃO CAVALCANTE, a função trata como se fosse outro campo, e não:

20/01/2004#25/02/2004125,3612,001DJOAO CAVALCANTE ....

20/01/2004
25/02/2004
125,36
12,00
1
D
JOAO
CAVALCANTE

Como resolver este problema.

Ricardo


Responder

26/09/2004

Aroldo Zanela

Colega,

Nesta caso, para aproveitar parte do código já implementado, faça as seguintes alterações:

var Arquivo: TStringList;
    Registro: TStringList;
    I, Z, X, Y, Delimitador, Comprimento: SmallInt;
    Linha: String;
begin
  Arquivo:= TStringList.Create;
  Registro  := TStringList.Create;

  try

    Arquivo.LoadFromFile(´e:\temp\tempfile.txt´);

    Z := Arquivo.Count-1;

    Registro.Clear;

    for I := 0 to Z do // Varrer o arquivo
    begin

      X:= 1;// posição inicial na linha
      Linha   := Arquivo.Strings[I];
    Comprimento := Length(Linha);

    for Y := 1 to Comprimento do // varrer a linha
      begin
        Delimitador:= Pos(´´,Linha);      // Encontra a posição do delimitador
        if Delimitador>0 then
        begin
          Registro.Add(Copy(Linha,X,Delimitador-X)); // Armazena o "campo" em Registro 
          X := Delimitador+1;                         // Nova posição inicial na linha
          Linha[Delimitador] := Chr(255);// Troca o delimitador da última posição obtida
        end;
      end;
      Memo1.Lines.Assign(Registro);
    end;

  finally
    Registro.Free;
    Arquivo.Free;
  end;
end;



Responder

26/09/2004

Zlink

Coloquei o novo código, mais não aparece nada no memo1

Ricardo


Responder

26/09/2004

Aroldo Zanela

Colega,

Troquei a linha:
    Arquivo.LoadFromFile(´e:\temp\tempfile.txt´);

por:
    Arquivo.Add(´20/01/2004#25/02/2004125,3612,001DJOAO CAVALCANTE´);
    Arquivo.Add(´20/01/200425/02/2004125,3612,001DAROLDO ZANELA´);
    Arquivo.Add(´20/01/200425/02/2004125,3612,001DMARTE DIGITAL´);
    Arquivo.Add(´20/01/200425/02/2004125,3612,001DINFOAGENDA SISTEMAS´);
    Arquivo.Add(´20/01/200425/02/2004125,3612,001DAZ TECNOLOGIA E PRODUTOS´);


Resultado:

20/01/2004
25/02/2004
125,36
12,00
1
D
JOAO CAVALCANTE
20/01/2004
25/02/2004
125,36
12,00
1
D
AROLDO ZANELA
20/01/2004
25/02/2004
125,36
12,00
1
D
MARTE DIGITAL
20/01/2004
25/02/2004
125,36
12,00
1
D
INFOAGENDA SISTEMAS
20/01/2004
25/02/2004
125,36
12,00
1
D
AZ TECNOLOGIA E PRODUTOS


No seu caso, não esqueça de substituir o # por @ nesta linha:

        Delimitador   := Pos(´´,Linha);      // Encontra a posição do delimitador 


Também deverá trabalhar a rotina para o caso de não haver o delimitador no final da linha.


Responder

27/09/2004

Dedi

Eu,fiz assim.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    Linha:string;
    LoadTxt,ResutTxt:TStringList;
begin
 LoadTxt:=TStringList.Create;
 ResutTxt:= TStringList.Create;
 LoadTxt.LoadFromFile(´d:\arquivotxt.txt´);

 for i:=1 to LoadTxt.Count do begin
  linha:=LoadTxt.Strings[i-1];
  while (pos(´´,linha)>0) do  begin
   ResutTxt.Add(trim(copy(linha,1,pos(´´,linha)-1)));
   Delete(linha,1,pos(´´,linha));
  end;
 end;

 ShowMessage(ResutTxt.Text);
end;



Responder

27/09/2004

Aroldo Zanela

Colega,

Existem várias formas para solucionar este problema. É importante lembrar que, é imprescindível construir o código dentro de blocos protegidos, liberar objetos, utilizar tipos adequados (variáveis) e principalmente, não ficar chamando métodos de contagem a cada iteração em estruturas de repetição, visando segurança e ganhos de performance.

Aqui tem mais algumas sugestões: http://delphiforum.icft.com.br/forum/viewtopic.php?t=28121&highlight=explode


Responder

27/09/2004

Paulo_amorim

Olá

Tinha uma dúvida parecida, neste tópico ela foi resolvida a contento com um algoritmo, espero que ajude

http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=string


Responder

21/12/2022

Daniel Sobrinho

meu caso é um pouco diferente, eu tenho um memo assim:
COLORIFICO 150G
PIMENTA DO REINO 20G

e preciso que ele fique com 10 ponto e virgula (;) por linha independente da quantidade espaços em branco:

COLORIFICO;150G;;;;;;;;;
PIMENTA;DO;REINO;20G;;;;;;;
Responder

23/12/2022

Arthur Heinrich

meu caso é um pouco diferente, eu tenho um memo assim:
COLORIFICO 150G
PIMENTA DO REINO 20G

e preciso que ele fique com 10 ponto e virgula (;) por linha independente da quantidade espaços em branco:

COLORIFICO;150G;;;;;;;;;
PIMENTA;DO;REINO;20G;;;;;;;


Me parece que o correto deveria ser:

"COLORIFICO";150G;;;;;;;;;
"PIMENTA DO REINO";20G;;;;;;;;;
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar