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>";
}