Foros del Web » Programando para Internet » PHP »

Como sumar los valores de un conjunto de linias

Estas en el tema de Como sumar los valores de un conjunto de linias en el foro de PHP en Foros del Web. Uf, me costo saber qué poner en el titulo... La verdad es que es mucho mas facil poniendo exactamente lo que tengo sobre la mesa: ...
  #1 (permalink)  
Antiguo 16/03/2006, 15:44
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 12 años, 1 mes
Puntos: 1
Pregunta Como sumar los valores de un conjunto de linias

Uf, me costo saber qué poner en el titulo...
La verdad es que es mucho mas facil poniendo exactamente lo que tengo sobre la mesa:

Código:
(2006: 3:16:15:48) - (Apoca) Total user(0)
(2006: 3:16:15:48) - (barrak) Total user(4)
(2006: 3:16:15:48) - (areselv) Total user(32)
(2006: 3:16:15:48) - (BtField) Total user(0)
(2006: 3:16:15:48) - (Middle) Total user(11)
(2006: 3:16:15:49) - (Apoca) Total user(0)
(2006: 3:16:15:49) - (barrak) Total user(5)
(2006: 3:16:15:49) - (areselv) Total user(32)
(2006: 3:16:15:49) - (BtField) Total user(0)
(2006: 3:16:15:49) - (Middle) Total user(10)
(2006: 3:16:15:50) - (Apoca) Total user(0)
(2006: 3:16:15:50) - (barrak) Total user(4)
(2006: 3:16:15:50) - (areselv) Total user(32)
(2006: 3:16:15:50) - (BtField) Total user(0)
(2006: 3:16:15:50) - (Middle) Total user(11) 
Esto es lo que tengo dentro del archivo C:\HB\GameServerLog\GameServerLogYYYYMMDD.log que se va actualizando cada minuto.
He separado en rojo y negro los bloques. En azul esta el nombre del mapa abreviado. Cada bloque corresponde a una actualizacion de los usuarios online de un juego y cada una de las 5 linias de un bloque corresponde a un mapa del juego.
Lo que yo quisiera es conseguir los 5 numeros del final de cada linia de cada bloque (jugadores online de cada mapa) y tambien sumar esos 5 numeros (total de jugadores online).
Intente con el siguiente codigo php pero no logré el resultado que esperaba (solo el numero de la ultima linia):

Código PHP:
<?
$dir 
'C:\\HB';
$servname "Middle"
$start "Jugadores Online en Middleland: "
$lines file($dir."\\GameServerLog\\GameServerLog".date("Ymd").".log"); 
foreach (
$lines as $line) {
    
$len strlen($line)-(38+strlen($servname));
    
$final substr($line, (35+strlen($servname)), $len);
}
echo 
$start.$final;
?>
Pueden ver su efecto aqui.

Gracias a los colaboradores.

ArgoN
  #2 (permalink)  
Antiguo 17/03/2006, 07:11
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 12 años, 1 mes
Puntos: 1
¿Alguien tiene alguna idea?

Gracias
  #3 (permalink)  
Antiguo 17/03/2006, 10:02
Avatar de bistoco  
Fecha de Ingreso: marzo-2006
Mensajes: 141
Antigüedad: 11 años, 9 meses
Puntos: 0
aki ta el codigo, probado y funcionando , obviamente en vez de el arreglo lineas lees de 5 las lineas del archivo

<?
$lineas[0]="(2006: 3:16:15:48) - (Apoca) Total User(5)";
$lineas[1]="(2006: 3:16:15:48) - (Apoca) Total User(3)";
$lineas[2]="(2006: 3:16:15:48) - (Apoca) Total User(10)";
$lineas[3]="(2006: 3:16:15:48) - (Apoca) Total User(1)";
$lineas[4]="(2006: 3:16:15:48) - (Apoca) Total User(15)";

//
$suma=0;
for($i=0;$i<5;$i++){
//separo respecto de ")"
$var=explode(")",$lineas[$i]);
/*
como ejemplo para $lineas[0]
la operacion me entrega el
siguiente arreglo

$var[0]="(2006: 3:16:15:48";
$var[1]=" - (Apoca";
$var[2]=" Total User(5"; <------ ahora divido esto
*/

// me importa todo despues del "("
// entonces divido por "("
$var=explode("(",$var[2]);
/*
la operacion me entrega el
siguiente arreglo

$var[0]=" Total User";
$var[1]="5"; <------ numero ke kiero sumar

*/
echo "<br>************";
$oper="\$suma+=".$var[1].";";
echo "<br>".$oper;
eval($oper);

}

echo "<br><br>***la suma total es :".$suma;
?>

saludos
  #4 (permalink)  
Antiguo 17/03/2006, 10:53
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 12 años, 1 mes
Puntos: 1
Muchas gracias bistoco!
Cuando llegue a casa voy a probar tu codigo. Solo me preocupa una cosa: los datos tengo que "jalarlos" de un archivo externo, GameServerLogYYYYMMDD.log, donde YYYYMMDD es la fecha del dia actual. Luego, dentro de ese archivo (es como un .txt) hay un monton de linias, como las que puse arriba, pero solo quiero conseguir los 5 numeros de las 5 ULTIMAS lineas, ya que eso son los datos mas actualizados.
Entonces, yo tenia:

Código PHP:
<?
$dir 
'C:\\HB';
$lineas file($dir."\\GameServerLog\\GameServerLog".date("Ymd").".log"); 
[...]
?>
Y tu me has dado:

Código PHP:
<?
$lineas
[0]="(2006: 3:16:15:48) - (Apoca) Total User(5)";
$lineas[1]="(2006: 3:16:15:48) - (Apoca) Total User(3)";
$lineas[2]="(2006: 3:16:15:48) - (Apoca) Total User(10)";
$lineas[3]="(2006: 3:16:15:48) - (Apoca) Total User(1)";
$lineas[4]="(2006: 3:16:15:48) - (Apoca) Total User(15)";

//
$suma=0;
for(
$i=0;$i<5;$i++){
//separo respecto de ")"
$var=explode(")",$lineas[$i]);
/*
como ejemplo para $lineas[0]
la operacion me entrega el
siguiente arreglo

$var[0]="(2006: 3:16:15:48";
$var[1]=" - (Apoca";
$var[2]=" Total User(5"; <------ ahora divido esto
*/

// me importa todo despues del "("
// entonces divido por "("
$var=explode("(",$var[2]);
/*
la operacion me entrega el
siguiente arreglo

$var[0]=" Total User";
$var[1]="5"; <------ numero ke kiero sumar

*/
echo "<br>************";
$oper="\$suma+=".$var[1].";";
echo 
"<br>".$oper;
eval(
$oper);

}

echo 
"<br><br>***la suma total es :".$suma;
?>
Entonces, como hago para coger las 5 ultimas lineas del archivo y aplicarles el codigo en cuestion?

Gracias de nuevo,

ArgoN

Última edición por -=ArgoN=-; 17/03/2006 a las 11:01
  #5 (permalink)  
Antiguo 17/03/2006, 16:41
Avatar de bistoco  
Fecha de Ingreso: marzo-2006
Mensajes: 141
Antigüedad: 11 años, 9 meses
Puntos: 0
yap ......esto funciona :

$dir = 'C:\\HB';
$lineas = file($dir."\\GameServerLog\\GameServerLog".date("Y md").".log");
// primero contamos las filas
$num_filas=0;
foreach($lineas as $linea){
$num_filas++:
}
$suma=0;
/* ahora ke tengo el numero de filas cambio los parametros del for
en ves de avanzar desde el primero,
retrocedemos 5 posiciones desde el ultimo
*/
for($i=$num_filas-1;$i>$num_filas-6;$i--){
[.......lo mismo ke antes.....]

xau
  #6 (permalink)  
Antiguo 17/03/2006, 18:06
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 12 años, 1 mes
Puntos: 1
Muchisimas gracias Bistoco, te debo una Ademas me ha servido para aprender mas sobre PHP. Solo una ultima pregunta. Porque se necesita el eval() ?

Gracias y hasta otra

ArgoN
  #7 (permalink)  
Antiguo 17/03/2006, 21:57
Avatar de bistoco  
Fecha de Ingreso: marzo-2006
Mensajes: 141
Antigüedad: 11 años, 9 meses
Puntos: 0
holas , lo ocupo porke los valores ke tengo ke sumar son string , entonces no se bien si se pueden sumar directamente y si php los interpretara como int ( nunca lo he probado ), entonces ocupo eval, ke recibe una cadena y lo ejecuta como una instrccion normal.

xau
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 16:48.