Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Leer determinada columna-fila de documentos

Estas en el tema de Leer determinada columna-fila de documentos en el foro de PHP en Foros del Web. Buenos días. Necesito leer, con php, unos determinados datos de un fichero que muestra la salida y la puesta de sol durante todo el año ...
  #1 (permalink)  
Antiguo 01/07/2013, 02:20
 
Fecha de Ingreso: julio-2013
Mensajes: 15
Antigüedad: 10 años, 9 meses
Puntos: 0
Leer determinada columna-fila de documentos

Buenos días.
Necesito leer, con php, unos determinados datos de un fichero que muestra la salida y la puesta de sol durante todo el año de 2013.
Lo que necesito son un par de cosas:
La primera es mostrarlo todo, igual que figura en la siguiente web (de donde extraigo la información y lo almaceno en un txt): [URL="http://www.fomento.gob.es/salidapuestasol/2013/Barcelona-2013.txt"]aqui[/URL]
La segunda es mostrar esos mismos valores, pero en una fecha determinada, por ejemplo, los valores entre el día 01/07/2013 hasta 31/08/2013.
He estado leyendo documentación referente a tratamiento de archivos con php, pero no he visto o no he entendido como poder buscar lo que necesito según columna-fila.
Me gustaría que alguien pudiera echarme una mano en esto...
Gracias.
  #2 (permalink)  
Antiguo 01/07/2013, 02:27
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Leer determinada columna-fila de documentos

He estado leyendo documentación referente a tratamiento de archivos con php, pero no he visto o no he entendido como poder buscar lo que necesito según columna-fila. varias funciones de archivos guardan las lineas en arrays, tienes que recorrer esos arrays y buscar lo que necesitas, por ej. con foreach(), salu2.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 01/07/2013, 03:17
 
Fecha de Ingreso: julio-2013
Mensajes: 15
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Leer determinada columna-fila de documentos

Cita:
Iniciado por repara2 Ver Mensaje
He estado leyendo documentación referente a tratamiento de archivos con php, pero no he visto o no he entendido como poder buscar lo que necesito según columna-fila. varias funciones de archivos guardan las lineas en arrays, tienes que recorrer esos arrays y buscar lo que necesitas, por ej. con foreach(), salu2.
Alguna función en concreto que me puedas comentar? He probado de usar file_get_contents, lo que me devuelve el contenido entero de mi txt, obviando los saltos de línea... lo cual ya no me interesa.
  #4 (permalink)  
Antiguo 01/07/2013, 04:44
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Leer determinada columna-fila de documentos

http://www.php.net/manual/es/function.fgets.php
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 01/07/2013, 05:26
 
Fecha de Ingreso: julio-2013
Mensajes: 15
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Leer determinada columna-fila de documentos

Gracias.
Tras darle unas cuantas vueltas, he conseguido algo parecido a lo que buscaba. A partir del fgets puedo sacar arrays por cada fila, y luego con la posición de ese array obtener la columna gracias a aplicar un explode. Tengo algo así:

Código:
$file = fopen("sol2013.txt", "r");
	while(!feof($file)){
		$dades=fgets($file)."<br/>";
		$dades2=explode(" ",$dades);
		print_r($dades2);
	}
fclose($file);
Ese mismo código, me muestra arrays (del 0 al 11, por cada mes) y luego al cambiar el print por
Código:
print_r($dades2[0]);
muestro los elementos del mes de enero, por ejemplo. Ahora bien, esos elementos salen como una sola string sin ninguna separación. He estado leyendo que hay una función llamada array_chunk que separa por arrays cada X (size determinado). Eso es lo que busco, pero al intentar aplicarlo, me desespero al ver que no hace nada...
Alguna ayuda?
Gracias de nuevo.
  #6 (permalink)  
Antiguo 01/07/2013, 05:47
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Leer determinada columna-fila de documentos

No creo que array chunk te sirva, lo que necesitas en substr() pero no conozco los datos sobre los que operas, es dificil decirte.
__________________
Fere libenter homines, id quod volunt, credunt.
  #7 (permalink)  
Antiguo 01/07/2013, 07:00
 
Fecha de Ingreso: julio-2013
Mensajes: 15
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Leer determinada columna-fila de documentos

Ok, tranquilo, veré lo que puedo hacer.
Muchas gracias por la ayuda ofrecida hasta ahora!
  #8 (permalink)  
Antiguo 01/07/2013, 07:54
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Leer determinada columna-fila de documentos

Holas, Tenshii.

Debes estudiar bien la estructura de tu archivo txt, de modo de saber que siempre, por ejemplo, en la fila [4] vas a tener los meses, por lo que esa fila te generará un array de 13 elementos (los 12 meses más "Día"). Luego, en la fila [5] tienes otro tipo de encabezados, que al separarlos con explode, te dará un array de aprox. 24 elementos, pero que tú sabes que en verdad se trata de un par de títulos por cada mes. En la fila [6] vuelves a tener diferente encabezado, esta vez para indicar hora y minutos, si no me equivoco, y nuevamente, por cada 4 de ellos tienes un mes de la fila [4].

Ya a partir de la fila [7] tienes tus datos como tal, y sabes que al hacer explode, te debiera dar siempre un array de 25 elementos aprox. (2 horas por cada mes, más el día).

Una forma limpia de trabajar es crear una estructura en php que emule a la del archivo txt, en cuanto a la "tabla", vale decir, un array multidimensional, donde tengas en un eje los encabezados que ya conoces, y en el otro eje, los días del mes.

Luego, tomas los valores del archivo de texto, y los almacenas en el array estructura, en la posición (coordenada) que le corresponde. Algo como:

Ejemplo:
Código PHP:
// array estructura:
$meses = array(=> "Enero"=> "Febrero"); // etc con todos los meses
$estructura = array();

// llenado de array
$fila 0;
$file fopen("sol2013.txt""r");
while(!
feof($file))
{
 if (
$fila >= && $fila <= 38)
 {
  
$dades fgets($file)."<br/>";
  
$dades2 explode(" "trim($dades));
  
$dia $dades2[0];
  
$pos 1;
  foreach (
$meses as $mesNum => $mesTxt)
  {
   
$estructura[$mesNum][$dia]["Ort"] = $dades2[$pos];
   
$pos++;
   
$estructura[$mesNum][$dia]["Ocas"] = $dades2[$pos];
   
$pos++;
  }
 }
 
$fila++;
}
fclose($file);

print_r($estructura); 
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #9 (permalink)  
Antiguo 01/07/2013, 09:26
 
Fecha de Ingreso: julio-2013
Mensajes: 15
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Leer determinada columna-fila de documentos

quinqui, muchas gracias por tu respuesta.
Esa era la forma en qué lo había pensado, pero no sabía estructurarlo.
Como llevaba dándole vueltas desde esta mañana, al final he decidido cortar por lo sano y he optado por hacerlo usando la función shell_exec y algún comando de Ubuntu me ha ayudado a culminar el trabajo.
Incluso el resultado me parece más bonito, visualmente.

Código:
for($i=1;$i<13;$i++){
	$vals[$i] = shell_exec("cat sol2013.txt | cut -d ' ' -f $i");
	$vals[$i] = explode("\n",$vals[$i]);
	for($j=0;$j<count($vals[$i]);$j++){
		$vals[$i][$j] = explode("-",$vals[$i][$j]);
                //Aquí dentro es donde empieza realmente lo interesante del asunto, que consistía en restar las horas para obtener el tiempo total durante el que no hay sol.
        }
}
Gracias a los dos por haberme ayudado! ;D

Etiquetas: documentos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.