Foros del Web » Programando para Internet » PHP »

Leer 2 filas de un archivo

Estas en el tema de Leer 2 filas de un archivo en el foro de PHP en Foros del Web. En el siguiente código: Cita: mysql_query ("SET NAMES 'utf8'"); $lines = file('kramnik.pgn'); foreach ($lines as $line_num) { $datos[] = $line_num; $event = $datos[0]; $game=$datos[15]; $q ...
  #1 (permalink)  
Antiguo 09/09/2010, 03:58
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Leer 2 filas de un archivo

En el siguiente código:

Cita:
mysql_query ("SET NAMES 'utf8'");
$lines = file('kramnik.pgn');
foreach ($lines as $line_num) {
$datos[] = $line_num;
$event = $datos[0];
$game=$datos[15];

$q = "INSERT INTO chesstemporal (event, game) values ('$event', '$game')";
}
mysql_query($q, $link);
mysql_close($link);
Lo que hago es leer las filas 0 y 15 de un archivo de texto e imprimirlas en 2 columnas de una base de datos (o sea, fila 0 va en la columna "event" y fila 15 va en la columna "game")
El tema es que después de la fila 15, viene otra fila "event" y luego otra fila "game", pero no los coloca en la segunda fila dela base de datos
Porque no sigue imprimiendo? Gracias
  #2 (permalink)  
Antiguo 09/09/2010, 05:03
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

debes poner el mysql_query($q) DENTRO del foreach
sino, en cada ciclo del foreach, estas sobreescribiendo el query y al final solo te insertará una sola instruccion, la ultima.
  #3 (permalink)  
Antiguo 09/09/2010, 05:16
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Lo hice, pero me repite: Pone la fila 1 del archivo en la fila 1 de la base de datos; lo repite 15 veces (en 15 filas de la bd) y luego imprime las filas 1 y 15 del archivo desde la fila 16 a la 31 de la base de datos, o sea 15 veces más.
  #4 (permalink)  
Antiguo 09/09/2010, 05:19
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

Pues, no entiendo que quieres hacer.
  #5 (permalink)  
Antiguo 09/09/2010, 10:40
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Suponte lo siguiente:
Tengo un archivo de texto que tiene 3 filas agrupadas (separadas por un espacio) luego vienen otras 3 filas, otro espacio y otras 3 filas, etc.

Cita:
fila1
fila2
fila3

fila4
fila5
fila6

fila7
fila8
fila9
etc.
Lo que quiero hacer es poner las 3 primeras filas en una fila de una tabla de la base de datos MySQL, luego, las otras 3 filas en la fila 2 de la base de datos, etc. (cada fila tiene su id)
O sea, sería así
Cita:
id Campo1 Campo2 Campo3
1 fila1 fila2 fila3
2 fila4 fila5 fila6
3 fila7 fila8 fila9
En síntesis, cada bloque de filas del archivo de texto sería una sola fila de una tabla de la base de datos.
  #6 (permalink)  
Antiguo 09/09/2010, 11:27
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

Pues, lo que estas haciendo a lo que quieres hacer, no se parece en nada, vamos que la lógica de programación te ha fallado.

Para conseguir lo que quieres, que no es muy difícil, yo haría algo así
Usaría un while para ir leyendo el fichero linea a linea.
Me guardo en un array las lineas que voy leyendo hasta que encuentre una que esté vacía.
Cuando encuentre la linea vacía, hago el INSERT con los datos del array de los datos, e inicializo el array.
Continuo leyendo hasta finalizar el fichero.

Si no entiendes algo, lo dices, pero es facilón lo que quieres hacer.
  #7 (permalink)  
Antiguo 09/09/2010, 16:35
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Entendí todo. Mi pregunta es, como hago para inicializar el array. Y otra cosa, es posible que tenga que concatenar las filas 1, 2 y 3, guardarlas en un array y reinicializar el array? Gracias
  #8 (permalink)  
Antiguo 10/09/2010, 02:03
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

Para reiniciar el array, puedes hacer así, por ejemplo (es una de varias formas)
unset($miarray);
No tienes que concatenar nada, si cada una de las tres filas va en un campo diferente de la tabla, si va en un solo campo, entonces si debes concatenarlas.

Saludos.
  #9 (permalink)  
Antiguo 10/09/2010, 08:19
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Es como vos decís, van en columnas distintas de la tabla, concatenar no sirve. Sería entonces:
1) Leer fila1
2) Leer fila2
3) Leer fila3
4) Si hay una fila en blanco (con un white, por ej. !=" ") entonces
5) Insertar fila1, fila2, fila3 valores ("fila1", "fila2", "fila3");
6) Reinicializar la matriz: unset($miarray);
7) Leer fila4 (esto de "leer fila4" calculo que lo hace inmediatamente y no lee la fila1, esa es una de mis dudas)
8) etc.
Gracias, lo pruebo
  #10 (permalink)  
Antiguo 10/09/2010, 08:29
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

Al estar leyendo el fichero de forma secuencial, no vas a volver al principio, sino que vas a ir leyendo hasta el final del fichero, es decir, que cuando termine con la fila3, seguirá en la fila4 aunque tu hagas el insert (y todo lo demás)
Deberías mirar el manual, pero mientras, aquí tienes un ejemplo, sacado de la misma página de php.net
Código PHP:
$f=fopen($file,'rb');
$data='';
while(!
feof($f))
    
$data.=fread($f,$size);
fclose($f); 
Ese while, va leyendo el contenido del fichero, linea por linea, hasta llegar al final, en realidad, lees la linea con fread, en el while, compruebas que no estés al final del fichero.
  #11 (permalink)  
Antiguo 10/09/2010, 11:43
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Hice algo, pero imprime la primer fila (el archivo contiene solamente 3 filas para simplificar el problema, y si, tuve que mover un } algo más arriba:

Cita:
foreach ($archivo as $linea_num => $linea[])
{
$event= $linea[0];
$site = $linea[1];
$game = $linea[2];
}
$q = "INSERT INTO chesstemporal (event, site, game) values ('$linea[0]', '$linea[1]', '$linea[2]')";
mysql_query($q, $link);
mysql_close($link);
A veces un simple "}" te vuelve loco. Bueno, seguiré avanzando, gracias por todo
  #12 (permalink)  
Antiguo 10/09/2010, 12:55
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Leer 2 filas de un archivo

Revisa este código, e intenta adaptarlo a lo que necesites, pero mas o menos, es lo que quieres.
Código PHP:
$f=fopen('kramnik.pgn','r');
$act=null;
valores null;
while(!
feof($f)){
  
$act fread($f);
  
$valores[] = $act;
  if (
$act == '') {
    
// Aqui hacemos el insert
    
$q "INSERT INTO chesstemporal (event, site, game) values ('$valores[0]', '$valores[1]', '$valores[2]')";
    
mysql_query($q$link);
    
$valores null;
  }
}
fclose($f); 
  #13 (permalink)  
Antiguo 10/09/2010, 17:03
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Leer 2 filas de un archivo

Puse $valores como matriz ($valores[]), y no funciona: tira un bucle hasta el infinito y no imprime nada, solo agrega lineas en forma infinita

Etiquetas: filas
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:42.