Fórum Alguém pode testar este fragmento de código e me explicar? #254994

18/10/2004

0

dado o seguinte codigo

procedure TForm1.btnlerClick(Sender: TObject);
VAR TEXT: TEXTFILE;
VALOR,LOTE,AITTEMP:STRING;
I: INTEGER;
begin
If Filebox.ItemIndex <> -1 then
 begin
   i:=0;
   btnler.Enabled:= false;
   ASSIGNFILE(TEXT,FILEBOX.FileName);
   Reset(TEXT);
   WHILE NOT EOF(TEXT) DO
    BEGIN
     READLN(TEXT,VALOR);
      DTMDB.CDS.Append;
      DTMDB.CDS.FieldByName(´MUN_AUTUADOR´).ASINTEGER      := STRTOINT(COPY(VALOR,1,4));
      DTMDB.CDS.FieldByName(´STATUS´).ASSTRING             := COPY(VALOR,5,1);
      DTMDB.CDS.FieldByName(´ITEM´).ASSTRING                := COPY(VALOR,6,11);
      DTMDB.CDS.FieldByName(´PLACA´).ASSTRING              := COPY(VALOR,17,7);
    end;
   end;
   DTMDB.CDS.Post;
   DTMDB.CDS.ApplyUpdates(0);
   CLOSEFILE(TEXT);

   //fim do preenchimento
   SHOWMESSAGE(´PROCESSO CONCLUÍDO!´);
end;

estou querendo saber pq no sql server no campo ITEM
aparece por exemplo D450306688 quadrinho no final
e no interbase não!!!
queria saber se tem como evitar isso no interbase..

o txt é o seguinte..


6713FD450306688 DLF1168
6713FD450306689 DLJ2536   


minha estrutura de tabela é

Placa varchar(7)
ITEM varchar(11)
Mun_autuador int
Status varchar(1)


obs. já tentei como char e deu a mesma coisa..

quem puder me explicar o pq ficarei mto grato..

Eric


Eric.miranda

Eric.miranda

Responder

Posts

18/10/2004

By_gandalf

pq vc nao da uma olhada melhor nesses copy ai... acho q ta aparecendo um quadrinho depois dos numeros porque ele ta fazendo a copia da string de 6 contando mais 11 pra frente, o que vai pegar tambem o espaço vazio depois desses numeros... acho q é isso q aparece...


Responder

Gostei + 0

18/10/2004

Aroldo Zanela

Colega,

Acho que as substrings estão corretas:

         1         2
12345678901234567890123

6713FD450306688 DLF1168
6713FD450306689 DLJ2536
|   ||          |
|   ||          1234567
|   |12345678901|
|   1|        1 +------ 17,07 Placa
1234|+---------->>>>>>>  6,11 Item
|   +>>>>>>>>>>>>>>>>>>  5,01 Status
++++>>>>>>>>>>>>>>>>>>>  1,04 Município atuador


Tem como enviar um fragmento do arquivo original para avaliar melhor: aroldo_zanela@hotmail.com (máximo de 1 MB).


Responder

Gostei + 0

19/10/2004

Eric.miranda

Valeu Aroldo.. estarei mandando o arquivo para seu email...
obrigado pela força..


By_Gandalf,
é justamente isso que estou querendo corrigir..
ele tem que ler 11 pq o tamanho desse campo pode variar..
ele pode ter no máximo 11 e no mínimo 3.. então ele lê os 11 e grava.. os espaços em branco já tentei eliminar com trim mas não deu certo..


Responder

Gostei + 0

22/10/2004

Eric.miranda

galera, ainda não consegui resolver meu problema..
se alguem puder testar aí pra mim, só pra ver se dá esse quadrado no fim do campo eu ficaria mto grato..

valeu
Eric


Responder

Gostei + 0

22/10/2004

Macario

Tipo será que nao teria algo com o Post estar fora do while?????


Responder

Gostei + 0

22/10/2004

Paulo_amorim

Olá

Esse ´quadrado´ se refere a qual caractere? Tente veriifcar para que se tenha uma idéia do que está acontecendo.

POde-se fazer uma verificação para tirar esse caractere também, por exemplo

sVariavel := ´´;
for i := 0 to Length(Texto) do
if (Texto[i] in [´A..Z´,´a..z´]) then
  sVariavel := sVariavel + Texto[i];


Ate+


Responder

Gostei + 0

22/10/2004

Eric.miranda

Valeu amigos por estarem me ajudando..
Paulo_Amorim,
o caractere a qual me refiro(no caso o quadrado) é como se fosse um terminador..
tipo assim.. se vizualizo o campo normalmente não vejo nada nele..ou seja ele está sem o quadrado.. mas se seleciono o campo ele aparece o quadrado..
outra coisa que percebi. é o seguinte..
se o campo tem tamanho 10 e preencho com 10 ele não aparece esse quadrado.. mas se preencho com 9 ele aparece um quadrado após o ultimo caracter.. e se preencho por exemplo com 6digitos ele põe um quadrado no 7º e o resto fica em branco..
então isso deve ser uma marca .. um terminador sei lá..
o engraçado é que isso não acontece no interbase.. só no sql server..


Macario o Aspone,
qto ao post tb já tentei e não obtive diferença..

abraços
Eric


Responder

Gostei + 0

22/10/2004

Adilsond

Fica difícil ajudar se voce não nos informa qual é o caracter. Experimente a função abaixo para descobrir qual o caracter e depois nos infórme.

procedure TForm1.btnlerClick(Sender: TObject);
VAR
  Text: TextFile;
  Valor: String;
begin
  if Filebox.ItemIndex <> -1 then
     begin
       btnLer.Enabled := False;
       AssignFile(Text,FileBox.FileName);
       Reset(Text);
       try
         while not EOF(Text) do
           begin
             Readln(Text,Valor);
             ShowMessage(´O caracter é o ´ + IntToStr(Ord(Valor[16])));
             Break;
           end;
       finally
         CloseFile(Text);
       end;
     end;
  //fim do preenchimento
  ShowMessage(´PROCESSO CONCLUÍDO!´);
end;



Responder

Gostei + 0

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

Aceitar