Extraer datos de TXT con formato raro

Hola, disculpen, necesito ayuda porque todo lo que se ve y puedo hacer hasta aohora es con formatos de txt delimitados por "," o "|".
cesito extraer determinados campos para después encolumnarlos. El formato del texto es así:
%a
linea1
linea2
"campo1=dato1"
linea3
linea4
"campo2=dato1"
linea6
linea7
"campo3=dato1"
%A

%a
linea1
linea2
"campo1=dato2"
linea3
linea4
"campo2=dato2"
linea6
linea7
"campo3=dato2"
%A

%a
linea1
linea2
"campo1=dato3"
linea3
linea4
"campo2=dato3"
linea6
linea7
"campo3=dato3"
%A

Así tengo Ndatos, (miles) todos delimitados en esos dos simpáticos caracteres.
Los campos y sus valores buscados están delimitados siempre entre los caracteres %a y %A. Yo necesito extraerlos encolumnarlos, ejemplo:
campo1,campo2,campo3
dato1,dato1,dato1
dato2,dato2,dato2
dato3,dato3,dato3.
dato_n, dato_n, dato_n
Muchas gracias y espero me salven.

1 respuesta

Respuesta
1
Puedes probar con algo así... He introducido el fichero que propones, y el resultado final se imprime por pantalla, pero puedes utilizar el array de $resultados para lo que te haga falta:
-----
<?php
// Cargamos los datos del fichero en un array...
$datos = file('./campos.txt');
// Resultado del cálculo...
$resultados = array();
// Para cada línea del fichero...
foreach ($datos as $linea) {
    // Si la línea tiene un símbolo "="
    if (strpos($linea, "=") !== FALSE) {
        // Eliminamos las comillas y los espacios en blanco...
        $linea = trim(trim($linea), "\""); // Opcional
        // Partimos la línea en un array
        $trozos = explode("=", $linea);
        // Almacenamos el dato ($trozos[1] en el índice $trozos[0])
        $resultados[$trozos[0]][] = $trozos[1];
    }
}
// A partir de aquí los $resultados ya están cargados...
print "
<pre>";
print_r($resultados);
print "</pre>
";
----
Cada función importante está enlazada a su correspondiente documentación en PHP.
Hola, Experto, muchas gracias por tu pronta respuesta.
Aunque entiendo las funciones aplicads necesito hacerte unas consultas respecto a tu código propuesto.
Comprendo la función "explode" y funciona de lujo; el hecho es que me cuesta entender la parametrización de la variable "$resultado", ¿cómo es que $trozos[0] es mostrado solo una vez al comienzo de cada lista? (Como titulo del campo)
En el comentario de una linea pusiste lo sig: "// Almacenamos el dato ($trozos[1] en el índice $trozos[0])".
Al ver el codigo hubiera esperado que linea a linea me mostrara $resultados[0] y trozo[1];
Tal vez sea un tema conceptual.
Muchas Gracias por tu colaboración, adjunto extracto del resultado de mi archivo.
Espero tus valiosos comentarios.
Array
(
    [-RecordId] => Array
        (
            [0] => 158276576
            [1] => 158276449
            [2] => 158276530
)          
     [-ProbableCause] => Array
        (
            [0] => 5
            [1] => 111
            [2] => 132
            [3] => 111
            [4] => 111
            [5] => 111
            [6] => 122
            [7] => 111
            [8] => 111 
        $trozos = explode("=", $linea);
Lo que hago en la variable resultados es un array, donde el índice del array es el titulo del campo que se está almacenando, y cada uno de los valores se introduce en su correspondiente índice.
Échale un ojo a las funciones de arrays de PHP. Por supuesto se puede buscar otra estructura de datos, dependiendo de para qué quieras utilizar la variable $resultado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas