PDA

Ver la versión completa : Obtener delimitadores



xXBeRSeKeRXx
10/12/2009, 19:45
Hola, tengo un archivo de texto con el siguiente formato:



33
46.50
46.43
---------------------------------------------------------
43
-11.50
3.50
---------------------------------------------------------
58
55.24
55.00
---------------------------------------------------------


Y así un listado larguisimo, necesito procesar ese archivo para volcar los datos en una hoja de calculo.

Primero separo en arrays tomando como un delimitador las lineas punteadas, pero luego no consigo separar cada uno de los 3 valores:



$fp = fopen("listado_procesado.txt", "r");
$contenido = fread($fp, filesize("listado_procesado.txt"));
fclose($fp);

$p1 = explode("---------------------------------------------------------", $contenido);

foreach($p1 as $_1){
echo $_1 . "<hr />"; // imprimo en pantalla para ver que tengo
$p2 = explode("\r\n", trim($_1)); // intento separar con salto de linea y retorno de carro.
}


Al explode del foreach probé pasando como parametro: "\r", "\n", "\r\n", "\n\r", " ".

En definitiva, quisiera saber si hay forma de saber que es lo que esta separando a esos valores almacenados en el array.

Saludos y gracias!

Nighthawk
10/12/2009, 21:43
a ver si entendi: (no entiendo mucho PHP, pero a ver si saco la logica)
estas leyendo caracter por caracter hasta ke yegas al retorno de carro, y ahi cortas.
y despues comparas si hay una entrada igual a "------------------" y ahi ubicas ke es una linea.
y despues keres separar el bloque de tres numeros en tres entradas separadas
eso es?

vofijatee
10/12/2009, 23:09
Hola, tengo un archivo de texto con el siguiente formato:



33
46.50
46.43
---------------------------------------------------------
43
-11.50
3.50
---------------------------------------------------------
58
55.24
55.00
---------------------------------------------------------


Y así un listado larguisimo, necesito procesar ese archivo para volcar los datos en una hoja de calculo.

Primero separo en arrays tomando como un delimitador las lineas punteadas, pero luego no consigo separar cada uno de los 3 valores:



$fp = fopen("listado_procesado.txt", "r");
$contenido = fread($fp, filesize("listado_procesado.txt"));
fclose($fp);

$p1 = explode("---------------------------------------------------------", $contenido);

foreach($p1 as $_1){
echo $_1 . "<hr />"; // imprimo en pantalla para ver que tengo
$p2 = explode("\r\n", trim($_1)); // intento separar con salto de linea y retorno de carro.
}


Al explode del foreach probé pasando como parametro: "\r", "\n", "\r\n", "\n\r", " ".

En definitiva, quisiera saber si hay forma de saber que es lo que esta separando a esos valores almacenados en el array.

Saludos y gracias!


No te entendí.

Si lo que necesitas es separar los valores del delimitador, no tendrías que splitear el archivo, solamente recorrerlo hasta encontrar esa línea (el separador), y recién ahí haces lo que tengas que hacer con la información, por ejemplo, podrías crear un array, llenarlo y cuando llegues a los "---" los sumas, restas, escribís en el excel o lo que sea.



EJ:



$archivo = "listado_procesado.txt";
$f = fopen($archivo, "r");

while ($linea = fgets($f, 1000))
{
if (trim($linea) != "---------------------------------------------------------")
{
echo "valor: $linea <br/>";
// parte 1
//acá podrías asignar el valor a un array
}
else
{
echo 'acá termima un "bloque" <br/>';
// parte 2
// acá haces lo que necesites con los valores del array que pooleaste arriba
}
}


Resultado en pantalla:

valor: 33
valor: 46.50
valor: 46.43
acá termima un "bloque"
valor: 43
valor: -11.50
valor: 3.50
acá termima un "bloque"
valor: 58
valor: 55.24
valor: 55.00
acá termima un "bloque"


saludos.

xXBeRSeKeRXx
11/12/2009, 08:52
Lo resolví de la siguiente manera:



$tolerancia = 10;

$test = file('listado_procesado.txt');
$out = $tmp = array();

foreach ($test as $line)
{
if (substr_count($line, '-') > 1)
{
$out []= $tmp;
$tmp = array();
}
else $tmp []= $line;
}


Ya con este array resultante se me simplificaron muchiiiiiiisimo las cosas :)...

Gracias por los aportes!!

vofijatee
11/12/2009, 12:53
copado que lo areglaste.

Era al pedo usar un split para eso, y además poco eficiente >.<

xXBeRSeKeRXx
11/12/2009, 15:51
copado que lo areglaste.

Era al pedo usar un split para eso, y además poco eficiente >.<

Si, lo que pasa es que el tiempo me corría y ya tenia la cabeza quemada... No podía pensar ni como abrir el navegador :s...

vofijatee
11/12/2009, 16:10
jaja, suele pasar .p