Ir para conteúdo
Fórum Script Brasil
  • 0

Dados txt - Array bidimansional - Agrupamento de dados por registro


Johnny1965

Pergunta

Minha estrutura do arquivo TXT, é esta:
Preciso ler, linha alinha e agrupar pelo (Cd), que é o único indice de cada registro. Assim, esse (Cd) refere-se a cada novo registro, podendo conter sub indices diversos - (11), (22), (Co), etc. Estes sub indices podem conter uma linha adicional (ver exemplo do (Co), no primeiro registro, que deve concatenar as linhas contendo "para gabinete" e "para armario.").
 
inventario.txt
//inicio
No 0012 de 31/01/2016
No 0012 de 31/01/2016
(Cd) 12345
(11) Cod1-023
(22) 22/12/1945
(Co) travamento de portas
para gabinete
para armario.
(Cd) 23456
(11) Cod1-055
(21) 01/01/2005
(22) gaveteiro
ferro
,madeira
,aluminio
(Cd) 78920
(22) Cod1-077
(54) 22/02/1975
(Co) clipe
aluminio ou ferro
(74) anodizado
(Cd) 0002525
(Di) Cod4-07100
(11) 22/02/2017
(22) camisa
vermelha
verde
(54) botoes amarelos
(Co) manga
,abacate
,cereja
 
//fim
Implementei a rotina a seguir mas, após muita pesquisa e modificações, não consegui agrupar os sub indices:
Juntamente , necessito de uma rotina para transferir os dados do array para variaveis e, posteriormente, para o BD do mysql.

Se alguém puder me dar uma luz, agradeço.

<?php


$cd =  [];
$grupo = [];

$contador = 0;

$arquivo = fopen('inventario.txt', 'r');
     while (!feof($arquivo)) {
         $linha = trim(fgets($arquivo, 1024));

         //$linha = trim($linha); 

         if (substr($linha, 0, 4) == '(Cd)') { 
             $contador = 0;
             if (!empty($grupo)) {
                 $cd[$id] = $grupo;
                 $grupo = [];
                 $contador = 0;
             }

             $id = substr($linha, 5, strlen($linha)-5 ); 
             $cd[$id][] = $linha;
         } else { 
          
                if (substr($linha, 0, 4) !== '(11)') {     
                     if (isset($grupo[$contador-1])) {
                           $grupo[$contador -1] .= ' ' . $linha;   
                           $contador--;
                      } 
                } else {
                    $grupo[] = $linha;
                }
             $contador++;
         
         }


     }

$cd[$id] = $grupo;

fclose($arquivo);

echo '<pre>';
print_r($cd); exit;

//-------------------------
//Rotina para transferir os dados do array para variaveis
$keys = array_keys($cd);
for($i = 0; $i < count($cd); $i++) {
    echo $keys[$i] . "<br>";
    foreach($cd[$keys[$i]] as $key => $value) {
        echo $key . " : " . $value . "<br>";
    }
    echo "<br>";
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...