Ler arquivos do cobol em PHP

508 views
Skip to first unread message

Helton Eduardo Ritter

unread,
Dec 26, 2007, 7:20:58 AM12/26/07
to PHP Avançado
Pessoal, estou precisando fazer uma rotina em um site que precisa de
informações de um sistema local, esse sistema é em cobol, guarda os
dados naqueles arquivos *.cbl.

A idéia era exportar (por um programa em cobol) os dados para um txt e
então fazer a importação.

mas isso não acho que seja uma solução otimizada. Teria como ler
diretamente o conteúdo desses arquivos?

obs. Não entendo nada de cobol, não sou eu que fiz/trabalho/dou
manutenção no outro sistema.

Alguma idéia?

Andre Farias

unread,
Dec 30, 2007, 2:58:09 PM12/30/07
to PHP Avançado
"> obs. Não entendo nada de cobol"
Mas entende de PHP correto?
Arquivos de dados COBOL são, em sua grande maioria, registros de
tamanho fixo.
Obtenha o tamanho dos registros (Data Division)
Abra o arquivo (fopen, etc)
Leia cada linha do arquivo como uma string
Copie cada registro como substring

Entendeu?

Andre Farias

unread,
Dec 31, 2007, 8:01:37 AM12/31/07
to PHP Avançado
Arquivos de dados Cobol são na verdade, em sua grande maioria,
arquivos tipados:
Os registros têm comprimento fixo e podem ser acessados como
substrings.
Logo, pode ser manipulado em PHP.

Abra o arquivo
Leia cada linha do arquivo em um laço while
copie cada campo para uma variável como substring

A definição dos campos está no fonte .cbl na seção "DATA DIVISION"

Feliz Ano Novo

Roberto Leite Machado

unread,
Dec 11, 2012, 12:53:45 PM12/11/12
to phpav...@googlegroups.com
Estou na fila, se achar uma solução.

Procuro uma solução a muuuuiiittttooooo tempo, primeiro não tem como ler os arquivos COBOL sem o auxilio do cara que os criou.
Eu encontrei um software de um russo de permite extrair os dados de qualquer arquivo cobol mas o troço é caro, 
mais de US$ 5.000 por um numero limitado de arquivos e muito mais caro para um numero ilimitado de arquivos. 

Em suma desisti ...

Roberto


Em 5 de dezembro de 2012 21:37, Alessandro Santana <alefe...@gmail.com> escreveu:
Helton,

Apesar do tempo, conseguiu resolver o problema?
Não conheço muito PHP, mas sou especialista em cobol e gostaria de ter essa solução.

--
Você recebeu esta mensagem porque está inscrito no Google Groups "PHP Avançado".
Para postar nesse grupo, envie e-mail phpav...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpavancado...@googlegroups.com
Para mais opções, visitem este grupo em http://groups.google.com.br/group/phpavancado
Tudo sobre php: http://www.phpavancado.net/
Documentação PHP: www.php.net



--
___________________________________________
Roberto
Nisi utile est quod facimus, stulta est gloria (Julius Phaedous)

Alexandre Galvão

unread,
Jan 25, 2013, 10:59:36 AM1/25/13
to phpav...@googlegroups.com
show


Em 25 de janeiro de 2013 13:55, Jefferson Mendes Silva <jef...@gmail.com> escreveu:
Bem, entendo um pouco das duas linguagens, e uma das coisas é correta:

Para leitura de arquivos (geralmente .dat) deve-se conhecer a estrutura dos arquivos, pois geralmente eles são indexados por posição de caracteres, com seus determinados índices. Isso também pode ser obtido se analisado o código-fonte do programa, caso contrário é muito difícil obter-se a engenharia reversa do mesmo.

Outra coisa é como serão utilizados os dados no php, se em arrays ou em banco de dados. Em qualquer um dos casos, um arquivo deve ser aberto para poder ser lido. Para tanto, usa-se o comando 'fopen' cuja sintaxe é:

fopen ("nome do arquivo relativo ao caminho da aplicação php no servidor","tipo da leitura/escrita");

No site da w3schools existe um tutorial que ensina a manipular arquivos de texto com php mais detalhado.

Demonstrando como um exemplo, imaginemos um arquivo cobol simples de nome "dados.dat" com dois campos, um com código, de 4 dígitos e um com nome de 30 dígitos armazenando em um array:

0001FULANO
0002SICLANO
eof(fim do arquivo)

Este é o código utilizado para este arquivo específico:

$arquivo=fopen("dados.dat","r") or die ("Não foi possível abrir o arquivo!");
while(!feof($arquivo)){
$codigo=$nome="";                                                             //inicialização das variáveis
$linha = fgets($arquivo);
for ($ponteiro=0;$ponteiro<4;$ponteiro++)
$codigo.=$linha[$ponteiro];
for (;isset($linha[$ponteiro];$ponteiro++)                                            //ponteiro já está inicializado e na posição correta, não necessário reiniciá-lo
$nome.=$linha[$ponteiro];
$dados[]=array ('codigo' => $codigo , 'nome' => $nome);
}
fclose($arquivo);    // fecha o arquivo


Entanto, podemos abir o arquivo de maneira segura da seguinte maneira:

$arquivo = fopen("dados.dat","r") or die ("Erro ao abrir arquivo!");

Para ler os dados, devemos lê-lo até o fim do arquivo, por isso usaremos um laço while:

while (!feof($arquivo)) { <código a ser executado> }

então, leremos uma linha e atribuiremos a uma variável temporária:

$linha=fgets($arquivo);

Igual à linguagem C, uma string é um array (vetor) de caracteres, portanto, se quiser pegar um caractere específico, basta utilizar-se da variável mais a posição do caractere como array, então, alguns laços for resolvem o problema (lembrando que array em php começa em 0 e não em 1 como outras linguagens):

for (<inicialização>;<enquanto esta condição for verdadeira>; <o que fazer no final de cada iteração>) { <código a ser executado>

for ($ponteiro=0;$ponteiro<4;$ponteiro++)    // fazer o comando enquanto o ponteiro for menor que 4

$codigo.=$linha[$ponteiro];                        //pega o caractere atual da linha, representado pelo ponteiro e junta-o ao final da string codigo (por isso o ponto-igual)

O mesmo procedimento acima ocorre com a segunda sequencia, mas como vamos até o final da linha, usamos isset[ponteiro] para saber se este caractere existe ou não.

Podemos então ou adicioná-lo a um banco de dados usando SQL ou a um array, neste caso vamos adicioná-lo a um array:

Arrays são representados por $variável[item], caso atribua-se um valor a um vetor sem o item expresso, o php entende q vc quer incluir um nov item no final:

$dados[]=array ('codigo' => $codigo , 'nome' => $nome);

'codigo' e 'nome' são índices verbais e opcionais. Caso queira pode procurar o item como $dados[0][0] ou $dados['codigo'][0] que resultam no mesmo item. Se não os quiser omita o nome codigo e o conector =>.

Então fecha-se o arquivo. Caso queira mostrar o conteúdo dos arquivos, use o comando print_r e um foreach para mostrar o array:

foreach($dados as $value){
print_r($value);
echo "<br/>";}

Espero ter contribuído com algo

Em quarta-feira, 26 de dezembro de 2007 10h20min58s UTC-2, Helton Eduardo Ritter escreveu:

--
--
Você recebeu esta mensagem porque está inscrito no Google Groups "PHP Avançado".
Para postar nesse grupo, envie e-mail phpav...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpavancado...@googlegroups.com
Para mais opções, visitem este grupo em http://groups.google.com.br/group/phpavancado
Tudo sobre php: http://www.phpavancado.net/
Documentação PHP: www.php.net
 
 
 



--
--

Atenciosamente,
Alexandre Leal
alexlea...@gmail.com

(021) 8539-1708

Reply all
Reply to author
Forward
0 new messages