Ler partes de cada linha de um arquivo texto
Moderador: Moderadores
Ler partes de cada linha de um arquivo texto
Boa tarde, Amigos!
Preciso ler partes de cada linha de um arquivo texto.
Tenho um arquivo assim:
01126/03/0706:33000000000000001801
01026/03/0707:31000000000000005901
01126/03/0707:32000000000000003501
E preciso passar os dados num DBF, lendo os seguintes dados:
26/03/07 06:33 18
26/03/07 07:31 59
26/03/07 07:32 35
Como faço isso?
Preciso ler partes de cada linha de um arquivo texto.
Tenho um arquivo assim:
01126/03/0706:33000000000000001801
01026/03/0707:31000000000000005901
01126/03/0707:32000000000000003501
E preciso passar os dados num DBF, lendo os seguintes dados:
26/03/07 06:33 18
26/03/07 07:31 59
26/03/07 07:32 35
Como faço isso?
Clipper 5.2e + DBFCDX + Exospace 1.0g
Você pode usar a função MemoRead() do Clipper. E a partir da string lida, botar isso numa malha pra separar as strings. Do jeito que está não dá pra importar direto pro DBF, claro. Precisa de uma separação "manual".
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Só de passagem....
Outra alternativa é carregar, escrever e gravar o arquivo com:
FOpen()
FWrite()
FClose()
Falou!
Outra alternativa é carregar, escrever e gravar o arquivo com:
FOpen()
FWrite()
FClose()
Falou!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Ah, sim. Esqueci de dizer. Se o arquivo for grande, a dica do Stanis é muito melhor. Sem dúvida.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
A ideia de ler o arquivo em baixo nível (FOPEN,FWRITE,FCLOSE,etc..) é mais seguro que o MEMOREAD pela sua limitação de 64KB. Outra forma seria utiliza o APPEND FROM SDF a um arquivo DBF com campos TODOS tipo caracter e no tamanho de cada campo conforme está o arquivo texto. Depois é só varrer o arquivo DBF e importar transformando o que é texto para tipo DATA, tipo NUMERICO. Enfim isso você deve saber fazer, utilize um
DO WHILE !EOF()
DO WHILE !EOF()
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Ler linha a linha arquivo TXT
O Pablo deu uma idéia a respeito do APPEND FROM. É uma forma também. Mas se for um arquivo pequeno, menor que 64KB, você pode fazer a tal malha que eu disse da seguinte forma:miracle escreveu:E como é que eu faria essa tal "malha"?
Código: Selecionar todos
#define kEOL Chr(13)+Chr(10)
cText := MemoRead(........) + kEOL
while !Empty(cText)
nPos := At(kEOL,cText)
cLine := Left(cText,nPos-1)
cText := SubStr(cText,nPos+2)
*
if !Empty(cLine)
// Neste ponto você tem uma linha isolada.
// Separe o que tiver que separar, e grave
// no DBF destino.
end
end[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Agora só falta dizer se o colega miracle resolveu e dizer como.
Meus comentários sobre o debate de dar a solução, você encontrará em:
https://pctoledo.org/forum/viewto ... 9461#29461
Abrí outro tópico para que não desvie ainda mais o assunto principal.
Meus comentários sobre o debate de dar a solução, você encontrará em:
https://pctoledo.org/forum/viewto ... 9461#29461
Abrí outro tópico para que não desvie ainda mais o assunto principal.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
A forma como ele resolveu nem é tão importante. Pelas dicas que recebeu, qualquer forma escolhida o levou à solução. É isso o que importa.
Ainda se fosse um problemão absurdamente complexo, a curiosidade se justificaria. Mas não é o caso. Acho que nem os novatos aproveitariam.
Ainda se fosse um problemão absurdamente complexo, a curiosidade se justificaria. Mas não é o caso. Acho que nem os novatos aproveitariam.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
haha, depois de tanta falação ele deve estar temeroso a se manifestar... hehe é apenas uma brincadeirinha...
Interessa sim, pois tem um detalhe que irá pesar na forma de fazer isso. Não me refiro a utilizar o MEMOREAD porque por dedução pode-se afirmar que tem situações que irá servir pelo tamanho ser pequeno (menos de 64K). Mas o que me refiro por ser importante, é que naquele exemplo que o miracle deu (1ª mensagem deste tópico) mencionava:
01126/03/0706:33000000000000001801
01026/03/0707:31000000000000005901
01126/03/0707:32000000000000003501
Se perceber a string "26/03/07" que mais tarde irá se tranformar em data está com 2 dígitos referindo-se ao ano. É um cuidado que irá tomar, só isso.
Interessa sim, pois tem um detalhe que irá pesar na forma de fazer isso. Não me refiro a utilizar o MEMOREAD porque por dedução pode-se afirmar que tem situações que irá servir pelo tamanho ser pequeno (menos de 64K). Mas o que me refiro por ser importante, é que naquele exemplo que o miracle deu (1ª mensagem deste tópico) mencionava:
01126/03/0706:33000000000000001801
01026/03/0707:31000000000000005901
01126/03/0707:32000000000000003501
Se perceber a string "26/03/07" que mais tarde irá se tranformar em data está com 2 dígitos referindo-se ao ano. É um cuidado que irá tomar, só isso.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Ah, sua preocupação é com isso? Nem esquenta. Aposto que ele já está ciente desse inconveniente. Além do quê, é só uma simples conversão de string. Nada mais.
Aliás, agora me lembro que uma dica, sua por sinal, dava conta do APPEND FROM. Nunca usei, mas não quero nem pesquisar a respeito. Então, me diga: com a data desse jeito o APPEND FROM funcionaria corretamente? Imagino eu que seria necessário apenas ajustar o SET CENTURY, não?
Aliás, agora me lembro que uma dica, sua por sinal, dava conta do APPEND FROM. Nunca usei, mas não quero nem pesquisar a respeito. Então, me diga: com a data desse jeito o APPEND FROM funcionaria corretamente? Imagino eu que seria necessário apenas ajustar o SET CENTURY, não?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Pode ser, mas ainda seria meio incerto. Eu faria uma função para ver qual seria a melhor opção na hora de transformar essa data com 2 dígitos no ano. Se bem que eu tinha proposto em APPENDAR para um arquivo DBF e depois lê-lo transformando-o de caracter para data. de todas formas seria conveniente transformar essa data apropriadamente. Sugiro isto:Maligno escreveu:seria necessário apenas ajustar o SET CENTURY, não?
Código: Selecionar todos
VTXT:="26/03/07"
VDATE:=STR2DATE(VTXT)
REPLACE DATA WITH VDTAE
FUNCTION STR2DATE(VTXT)
SET DATE TO BRITISH
SET CENTURY ON
XDT:=CTOD(VTXT)
XYD:=(RIGHT(ALLTRIM(STR(YEAR(XDT))),2))
XYA:=(RIGHT(ALLTRIM(STR(YEAR(DATE()))),2))
IF VAL(XYD)>VAL(XYA)
IF (VAL(XYD))-(VAL(XYA))<2
XDT:=CTOD( SUBSTR(DTOC(XDT),1,6)+"20"+XYD )
ELSE
XDT:=CTOD( SUBSTR(DTOC(XDT),1,6)+"19"+XYD )
ENDIF
ELSE
XDT:=CTOD( SUBSTR(DTOC(XDT),1,6)+"20"+XYD )
ENDIF
RETURN XDTObs.: Esquecia de mencionar, essa função que eu fiz só é válida para este centenário (acho dificil ter que responder por algum programa com mais de cem anos... hehe). Mas pode ser adaptado... creio eu...
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Não. Eu estava perguntando se o APPEND FROM poderia manipular isso diretamente como data. Se não der, terá de ser por string. Daí tem que converter, depois separar, depois gravar,...
))
Acho que pra resolver esse caso de forma mais apropriada, e fácil, seria o MemoRead() para arquivos pequenos ou as funções de baixo nível (FOpen, FRead, etc) para arquivos grandes.
Por essas e outras eu fiz meu sub-sistema de tratamento de texto. Não esquento a cabeça com nada.
Acho que pra resolver esse caso de forma mais apropriada, e fácil, seria o MemoRead() para arquivos pequenos ou as funções de baixo nível (FOpen, FRead, etc) para arquivos grandes.
Por essas e outras eu fiz meu sub-sistema de tratamento de texto. Não esquento a cabeça com nada.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Ok, entendo a sua pergunta. Funcionaria se no arquivo texto a SUB-STRING (que corresponde a data) fosse no padrão aaaammdd com quatro dígitos o ano (sem importar se está ou não o CENTURY ON ou OFF). Daí ele importa direto sem problemas. Mas não sei se ele pode alterar o formato desse arquivo texto.Maligno escreveu:Não. Eu estava perguntando se o APPEND FROM poderia manipular isso diretamente como data.
Sim claro não é uma forma tão prática, mas é segura. E se o formato do arquivo texto fosse como eu citei acima, então este seria o caminho mais rápido, prático e eficiente de puxar os dados de um arquivo texto.Se não der, terá de ser por string. Daí tem que converter, depois separar, depois gravar...
Claro, contando que esse arquivo SEMPRE seja menor que 64K, então dou a razão. Mas como você disse já uma vez... dada a limitação de 64k e não servindo para TODAS as ocasiões, eu o considero INEFICIENTE.Não esquento a cabeça com nada.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Acho que segurança em si não é uma preocupação neste caso. No lugar do colega já faria tudo por FOpen() e FRead() mesmo. Já matava a cobra com uma porretada bem dada no meio do coco dela. E fim.Sim claro não é uma forma tão prática, mas é segura.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!

