Fórum Importar TXT com virgula #280207
05/05/2005
0
Tentei procurar algo sobre TStringList pois me falaram q com ele tb da pra fazer, so que não achei nenhum exemplo para importar os dados.
são 5 campos q quero importar:
Nome
Endereco
Telefone
TelCel
Orcamento
Todos separados por virgula... se puderem solucionar minha duvida agradeço
Vagner.oliveira
Curtir tópico
+ 0Posts
05/05/2005
Vagner.oliveira
Gostei + 0
05/05/2005
Antseralves
é uma escolha infeliz pois em caso de campos decimais no txt
os mesmos, dependendo de como está configurado o sistema,
deverão ser representados com vírgula, porem isso é outro assunto.
Acho que o exemplo abaixo poderá ajudar, naturalmente que com as
adaptações específicas do teu caso !.
Boa Sorte.
procedure TForm1.Button1Click(Sender: TObject);
var Lista : TStringList;
I,J,Li,Lf : integer;
L,Sub : String[80];
TipoCampo : TFieldType;
campo : Variant;
begin
Lista := TStringList.Create;
Lista.LoadFromFile(´Arquivo.TXT´); // Carrega o txt
Table1.EmptyTable; // Limpa a tabela.
Table1.Open;
for I := 0 to Lista.Count-1 do
begin
L := Lista.Strings[I]; // Só para escrever menos..
Lf := 0;
Li := 1;
J := 0;
Table1.Insert;
repeat
Lf := PosEx(´,´,L,Lf+1);
if Lf = 0 then
Lf := Length(L)+1;
Sub := Copy(L,Li,Lf-Li);
TipoCampo := Table1.Fields.Fields[J].DataType;
case TipoCampo of
ftSmallint, ftInteger,ftWord,ftBoolean : Campo := StrToInt(Sub);
ftFloat, ftCurrency : Campo := StrToFloat(Sub);
ftDate, ftTime, ftDateTime : Campo := StrToDateTime(Sub);
else
Campo := Sub;
end;
Table1.Fields.Fields[J].AsVariant := Campo;
Inc(J);
Li := Lf+1;
until Lf > Length(L);
Table1.Post;
end;
Table1.Close;
Lista.Free;
end;
Obs: Dê USES na unit [b:31a096aa89]StrUtils[/b:31a096aa89]
Gostei + 0
05/05/2005
Marco Salles
procedure TForm1.Button2Click(Sender: TObject); var Entrada: String; I : Integer; j:Integer; tamanho:Integer; begin entrada:=MARIA DA SILVA,Rua do Perdido,3721-3678,9986-0861,500.30´; tamanho:=Length(entrada); j:=1; i:=Pos(´,´,entrada); Showmessage(Copy(Entrada,j,i-j));//Nome; J:=J+i; i:=Pos(´,´,copy(entrada,j,Tamanho)); Showmessage(Copy(Entrada,j,i-1));//endereço; j:=j+i; i:=Pos(´,´,copy(entrada,j,Tamanho)); Showmessage(Copy(Entrada,j,i-1));//Telefone; j:=j+i; i:=Pos(´,´,copy(entrada,j,Tamanho)); Showmessage(Copy(Entrada,j,i-1));//Celular ; j:=j+i; Showmessage(Copy(Entrada,j,tamanho-1));//Orcamento; end;
É Apenas uma idéia ... Voce deve fazer algumas adaptações... Rode e Veja
Analogia :arrow:
http://forum.clubedelphi.net/viewtopic.php?t=62359&highlight=&sid=d43a1ef52c07378a176d531ee312c76d
Gostei + 0
08/05/2005
Clenio
espero ter sido entendido na minha explicação.
160168831910018ABADIA GOMES DOS SANTOS16/03/1964F05/05/2005MORRINHOSGO
203811051690005ABAEL DO PRADO RAMOS20/07/1977M05/05/2005MORRINHOSGO
206868110750006ABDIAS DA COSTA BARROS24/06/1951M05/05/2005MORRINHOSGO
125585252300000ABDIAS FERREIRA GONCALVES07/05/1971M05/05/2005MORRINHOSGO
209994597880001ABDINAM CIRQUEIRA MACIEL02/01/1979M05/05/2005MORRINHOSGO
207125532950007ABEDENINGO FELIX DA SILVA11/12/1970M05/05/2005MORRINHOSGO
123817698050007ABEL GAMA MADUREIRA01/07/1970M05/05/2005MORRINHOSGO
desde ja obrigado.
Gostei + 0
08/05/2005
Edilcimar
Gostei + 0
08/05/2005
Antseralves
Gostei + 0
08/05/2005
Aerreira
Discordo do antseralves.
No seu caso, Clenio, bastaria usar o código exemplificado acima, porém com alguns ajustes, a saber:
- seu primeiro campo é numerico e de tamanho fixo seguido por um espaço;
- o segundo campo é um nome com ´n´ palavras e espaços, mas que tem como fixo o fato de ter como campo seguinte uma data, então basta localizar uma ´/´ e retornar 3 caracteres e terá o final do nome;
- o terceiro campo já estará localizado;
- o quarto campo é fixo (sexo = uma posição);
- o quinto campo é novamente uma data... basta seguir os mesmos procedimentos do terceiro campo;
- o sexto campo é o nome de uma cidade, que pode ter ´n´ palavras e espaços, mas novamente é seguida por uma sigla de estado, que será fixo e fácilmente identificável;
- o sétimo e último campo, é o estado.
Com alguns poucos ajustes no código exemplificado pelo Marco Salles você (Clenio) conseguirá facilmente importar seu TXT.
Gostei + 0
09/05/2005
Antseralves
o que extá [b:dca4e5378c]EXEMPLIFICADO[/b:dca4e5378c] pelo Clenio. Porem creio que esse não seja o caso. A solução deverá contemplar outros casos como por exemplo:
Se o sexto campo fosse referenta a uma cidade com nome de BREJO DA SE no estado de Alagoas ficaria assim:
BREJO DA SE AL
Pela solução proposta o SE seria confundido com o estade de Sergipe !.
Continuo achando que um txt sem uma formatação previamente conhecida não teremos uma solução facil para o problema.
Gostei + 0
09/05/2005
Kotho
Se for isso é fácil... basta usar o Copy com números fixos de posição inicial e quantidade.
Gostei + 0
09/05/2005
Aerreira
Agora sim, antseralves, concordo. Neste caso teríamos problemas, mas caso o arquivo tivesse sempre a mesma formatação bastaria considerar que o estado é sempre o último campo, então não teriamos esse problema do ´Brejo da Sé´.
O que o Clenio precisa é tomar uma desisão, afinal o arquivo é fixo ou não, pois depois de responder a esta mensagem encontrei outra dele dizendo que o arquivo tem delimitadores ´|´ o que já facilita em muito o processo de importação.
Um abraço a todos....
Gostei + 0
09/05/2005
Massuda
Gostei + 0
09/05/2005
Vagner.oliveira
Gostei + 0
09/05/2005
Antseralves
só que trocando a linha;
Lf := PosEx(´,´,L,Lf+1); por Lf := PosEx(´;´,L,Lf+1);
Lembre de dá uses na unit [b:d60335ef23]StrUtils[/b:d60335ef23]
Testa e me diz se funcionou !. Boa sorte..
AntSer
=====
Gostei + 0
10/05/2005
Clenio
Vou esclarecer alguns pontos que talvez possa ajudar:
Os campos da tabela estão assim:
[b:9b17ca81a7]Campo Tipo Tamanho[/b:9b17ca81a7]
Numero Alpha 15
Nome Alpha 50
DataNasc Data
Sexo Alpha 1
DataEmis Data
Municipio Alpha 30
UF alpha 2
O problema é que tenho um arquivo no Excel com mais de 30.000 Linhas e eu salvei este arquivo como txt para importar para o meu BD, que é paradox. [b:9b17ca81a7]O Marco Salles [/b:9b17ca81a7]me passou um codigo com delimitador [b:9b17ca81a7]´|´ [/b:9b17ca81a7]que funciona perfeitamente, so que o arquivo tem [b:9b17ca81a7]mais 30.000 linhas e fica dificil colocar o delimitador manualmente em todas as linhas.[/b:9b17ca81a7]
O problema está nos [b:9b17ca81a7]espaços entre os campos[/b:9b17ca81a7], exemplo o campo nome, porque o nome das pessoas não tem o mesmo tamanho alguns ocupam 15 espaços outros ocupam 40 o maximo e 50, acho que a questão está nos espaços que são de tamanhos variados entre os campos.
Espero ter esclarecido os companheiros, para que possam encontrar uma forma de me ajudar a resover este problema.
mais uma vez obrigado a todos .
Gostei + 0
10/05/2005
Edilcimar
continua válido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)