• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

paulo_jcg

Importação de ficheiro de gwbasic [Resolvido]

5 mensagens neste tópico

Cumprimentos...

    Tenho um problema e não estou a conseguir encontrar solução para o mesmo. Deram-me um ficheiro de artigos e pediram que convertesse para outra base de dados.

  O que sei do ficheiro é que:

      - foi gerado por uma aplicação escrita em gwbasic

      - consiste em blocos de 64 caracteres em que 60 dos quais são em forma de texto, (que consigo interpretar sem problemas), no entanto existem os 4 bytes que por exclusão de campos sei que deverá ser o preço do artigo.

 

    O problema está nesse campo, não consigo interpretar o valor armazenado ex:

            fich (hex)  0x33333380  corresponde a preço 0,70

            fich (hex)  0x00001883  corresponde a preço 4,75

            fich (hex)  0x33334B83  corresponde a preço 6,35

            fich (hex)  0xCDCC5483  corresponde a preço 6,65

   

    Muito obrigado pela atenção.

Sem mais

Paulo Gomes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse ficheiro está codificado em UFT-8 ou algo assim?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

  O ficheiro é um ficheiro do antigo DOS, pelo que vi está em ASCII CP860 ou CP850, acho que o problema não tem a ver com o formato do ficheiro, mas sim dos dados.

  Pelo que vi o programador usa uma linha em gwbasic do tipo W=CVS(MID$(A, 51, 4)):WTP=WTP+W:WPTE=W

que segundo o que percebi lê o valor que preciso, mas precisava disso em .NET v :P

Paulo Gomes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pegas no velho GWBASIC e utilizas uma das muitas rotinhas para exportação .CSV

Bem depois de ter visto o código com mais atenção dou-te duas sugestões que me parecem lógicas:

1) Descobrires que modulo (ficheiro.bas) faz a listagem e modificares o codigo para te dar output em ficheiro ASCII (as is).

2) Mais dificil um bocadito, Descobrires a rotina que gera a listagem, acrescentares o caracter ";" entre os campos (eles devem estar com LOCATE, ou algo do genero). Mas essa é um pouco mais "Laborosa".

De qualquer das formas desejo-te boa sorte.

Mais uma Observação:

Para te facilitar a vida a editar o codigo, ele pode ser editado com o velho QBASIC do DOS, desde que gravado com a opção ",a"

Save "listagem.bas", a

Assim podes editar com o QBASIC ou qualquer outro editor ASCII, e continuar a executar/interpretar no GWBASIC.

Cumprimentos

A. Santos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cumprimentos...

    Tenho um problema e não estou a conseguir encontrar solução para o mesmo. Deram-me um ficheiro de artigos e pediram que convertesse para outra base de dados.

  O que sei do ficheiro é que:

      - foi gerado por uma aplicação escrita em gwbasic

      - consiste em blocos de 64 caracteres em que 60 dos quais são em forma de texto, (que consigo interpretar sem problemas), no entanto existem os 4 bytes que por exclusão de campos sei que deverá ser o preço do artigo.

 

    O problema está nesse campo, não consigo interpretar o valor armazenado ex:

            fich (hex)  0x33333380  corresponde a preço 0,70

            fich (hex)  0x00001883  corresponde a preço 4,75

            fich (hex)  0x33334B83  corresponde a preço 6,35

            fich (hex)  0xCDCC5483  corresponde a preço 6,65

Caro Paulo,

Como no post anterior ficou visivel, estive a debruçar-me sobre a matéria. Porquê a abordagem por bytes? É complexa, morosa, e na minha opinião consumidora de recursos. É quase como para ir do Porto a Lisboa, traçar uma rota que passe por Madrid. Gostava de saber o raciocinio por detraz da abordagem que fez ao problema, para poder enriquecer os meus conhecimentos.

Eu pessoalmente optaria por uma abordagem "invasiva", uma vez que GWBASIC é "Ancient Tech", e consequentemente uma linguagem interpretada, tentaria ver qual o file que ele chama para ler e colocar num dispositivo de output a listagem, e inseria modificações no codigo de forma a formata-lo tipo CSV ou algo do genero com ( ; ). Mas é apenas a minha visão das coisas... Ao gerar um output deve existir sempre instruções do tipo

Print

para ecrã, ou

LPrint

para impressora, nesse caso basta ver quais os nomes das variaveis que o programador deu a cada campo, e acrescentar na instrução de impressão nos devidos locais o seguinte:

 + ";" + 

  em que basicamente vai adicionar o caracter ( ; ) em espaços vazios entre os campos, de forma a delimita-los.

O Codigo que enuncia no seu segundo post trata-se de um codigo aparentemente destinado a converter escudos a euros. Provavelmente o codigo que gera o output deve estar noutro ficheiro.

Cumprimentos.

A. Santos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora