note 90341 added to function.dbase-get-header-info

From: Date: Fri, 17 Apr 2009 01:13:32 +0000
Subject: note 90341 added to function.dbase-get-header-info
Groups: php.notes 
Request: Send a blank email to php-notes+get-153416@lists.php.net to get a copy of this message
Um dos principais problemas era a flata desta função nas versões PHP<5.0 O Script abaixo "contorna" o problema , e gera uma "pseudo-cabeçario" baseado no próprio conteúdo do arquivo DBF Óbvio informar que se o arquivo DBF a ser submetido ao script estiver vazio , ou com poucos elementos ou linhas , ou ainda , se estes não representarem o conteudo com fidegnidade , ou seja , com muitos campos NULLs , o script podera não funcionar a contento com relação ao resultado desejado. Utilizei por muito tempo o script abaixo como alternativa para a ausência da função dbase-get-header-info em versões PHP < 5.0 na confecção de cabeçarios e posterior transformação de arquivo DBF p/ MYSQL <?php // parametros iniciais // Path - caminho para arquivo dbf a ser aberto $diretorio_open = 'dbf/'; // Arquivo a ser aberto e explorado $file = 'arquivo.dbf'; $con = dbase_open($diretorio_open.$file,0) or die('Erro na Conexão com o arquivo DBF'); // PHP>5.0 - usa função dbase_get_header_info para ler cabeçario // PHP<5.0 - Simula a leitura através do conteudo do próprio arquivo if(function_exists(dbase_get_header_info)) {$estrutura_arquivo = dbase_get_header_info($con);} else {$estrutura_arquivo = alternative_dbase_get_header_info($con);} // imprime o header do arquivo print_r($estrutura_arquivo); // --------------------------------------------- // função alternativa function alternative_dbase_get_header_info($con) { //Pega o num. de linhas $rows = dbase_numrecords($con); //faz o loop percorrendo todas as linhas e carrega a variável $registro com os dados for($i=1;$i<=$rows;$i++) { //Pega a linha do arquivo DBF e coloca como array $registro = dbase_get_record_with_names($con,$i); $y=0; // Mostra as Chaves e os valores do array foreach ($registro as $chave => $valor) { // pega as chaves (field - Coluna) só se for a primeira vez if($i==1) {$estrutura_arquivo[$y]['name'] = $chave;} // finalmente pega o tipo , o comprimento e a precisão no mesmo padrão que dbase_get_header_info if( ( ( ( @checkdate(substr($valor,4,2),substr($valor,-2),substr($valor,0,4)) ) && (strlen(trim($valor))==8) ) || (strlen(trim($valor))==0) ) && $chave != 'deleted') // testa se é data checkdate(MM,DD,AA) { if(!isset($estrutura_arquivo[$y]['type'])) { $estrutura_arquivo[$y]['type'] = 'date'; $estrutura_arquivo[$y]['length'] = 8; $estrutura_arquivo[$y]['precision'] = '0'; } $e_data = TRUE; } if(is_numeric(trim($valor)) && strstr($valor, '.')) { $estrutura_arquivo[$y]['type'] = 'number'; if($estrutura_arquivo[$y]['length'] < strlen(trim($valor))) {$estrutura_arquivo[$y]['length'] = strlen(trim($valor));} if($estrutura_arquivo[$y]['precision'] < strlen(strstr(trim($valor),'.'))-1) {$estrutura_arquivo [$y]['precision'] = strlen(strstr(trim($valor),'.'))-1;} } if(is_numeric(trim($valor)) && !strstr($valor, '.') && !$e_data && $estrutura_arquivo[$y]['precision'] < 1 && $estrutura_arquivo[$y]['type'] != 'character') { $estrutura_arquivo[$y]['type'] = 'number'; if($estrutura_arquivo[$y]['length'] < strlen(trim($valor))) {$estrutura_arquivo[$y]['length'] = strlen(trim($valor));} $estrutura_arquivo [$y]['precision'] = '0'; } if( strlen($valor)>10 || (!is_numeric(trim($valor)) && strlen(trim($valor))!=0) ) { $estrutura_arquivo[$y]['type'] = 'character'; if($estrutura_arquivo[$y]['length'] < strlen($valor)) {$estrutura_arquivo[$y]['length'] = strlen($valor);} $estrutura_arquivo [$y]['precision'] = '0'; } $e_data = FALSE; $y+=1; } } return(estrutura_arquivo); } ?> ---- Server IP: 200.185.126.110 Probable Submitter: 189.68.167.117 ---- Manual Page -- http://www.php.net/manual/en/function.dbase-get-header-info.php Edit -- https://master.php.net/note/edit/90341 Del: integrated -- https://master.php.net/note/delete/90341/integrated Del: useless -- https://master.php.net/note/delete/90341/useless Del: bad code -- https://master.php.net/note/delete/90341/bad+code Del: spam -- https://master.php.net/note/delete/90341/spam Del: non-english -- https://master.php.net/note/delete/90341/non-english Del: in docs -- https://master.php.net/note/delete/90341/in+docs Del: other reasons-- https://master.php.net/note/delete/90341 Reject -- https://master.php.net/note/reject/90341 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#153416) next »