PHP - Lectura de Archivos TXT

 
Vista:
sin imagen de perfil

Lectura de Archivos TXT

Publicado por Cesar (3 intervenciones) el 22/04/2017 20:33:10
Tengo un problema que no se como solucionarlo resulta que yo tyengo un archivo TXT con datos por renglon de la siguiente manera

1,2,3,3,2,4,5
2,3,4,5,65,3,23,1
5,3,32,1,2,2,3,4,5

Todos son valores aleatorios pero quisiera agruparlos de la siguiente manera

(1,2)
(3,3)
(2,4)
(5,0)
(2,3)
(4,5)
(65,3)
(23,1)
..
..
.
.
.

que me los vaya agrupando con parentesis y una coma cada 2 elementos si no tiene pareja el dato que agrege un 0
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Lectura de Archivos TXT

Publicado por kip (877 intervenciones) el 23/04/2017 03:04:19
Hola, me ha parecido interesante lo que quieres y tengo tres soluciones para tu problema:

Con estructuras de control:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$file = file('archivo.txt');
 
$result = '';
 
foreach ($file as $line) {
    $vals = explode(',', $line);
    for ($i = 0, $s = count($vals); $i < $s; $i += 2) {
        $temp = $i + 1;
        if (isset($vals[$temp])) {
            $result .= sprintf("(%d, %d)\n", $vals[$i], $vals[$temp]);
        } else {
            $result .= sprintf("(%d, 0)\n", $vals[$i]);
        }
    }
}
 
echo $result;

Con funciones de arrays:

1
2
3
4
5
6
7
8
9
10
11
12
$file = file('archivo.txt');
 
$result = array_reduce($file, function($return, $line) {
    $vals = explode(',', $line);
    while (pos($vals)) {
        $return .= sprintf("(%d, %d)\n", pos($vals), next($vals));
        next($vals);
    }
    return $return;
});
 
echo $result;

Un metodo con algo de operaciones matematicas:

1
2
3
4
5
6
7
8
9
10
$file = file('archivo.txt');
 
$result = array_reduce($file, function($return, $line) {
    $vals = explode(',', $line);
    $format = str_repeat("(%d, %d)\n", floor(count($vals)/2));
    $format .= (count($vals) % 2 > 0) ? "(%d, 0)\n" : '' ;
    return $return .= vsprintf($format, $vals);
});
 
echo $result;

Todos muestran el mismo resultado:

1
2
3
4
5
6
7
8
9
10
11
12
13
(1, 2)
(3, 3)
(2, 4)
(5, 0)
(2, 3)
(4, 5)
(65, 3)
(23, 1)
(5, 3)
(32, 1)
(2, 2)
(3, 4)
(5, 0)

Pruebalas y si es lo que buscas entonces estudialas.

Nos cuentas como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil

Lectura de Archivos TXT

Publicado por Cesar (3 intervenciones) el 23/04/2017 03:12:01
Vamos a emplearlo justo en este momento!! :D te comento como salir el resultado!!! me parecen interesantes las soluciones propuestas te aviso mas tarde justo lo adapto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Lectura de Archivos TXT

Publicado por Cesar (3 intervenciones) el 23/04/2017 21:29:33
Quedo solucionado bro funcionando sin problemas GRACIAS!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar