Silvanha: Casi lo tengo: Fijate en la pregunta que hare ahora y en el código
Tengo un problema de iteración con php. Leo de un archivo y en la base de datos me imprime correctamente en todas las filas, excepto en la penúltima, en la cual me termina imprimiendo todo el resto de los datos.
Cita: $lines = file('kramnik.pgn');
foreach ($lines as $line_num)
{echo "".$line_num;
$datos[] = $line_num;}
foreach ($datos as $line_num)
/*{echo "<br>cosa:".$line_num;} */
$event = $datos[0];
$site=$datos[1];
$date=$datos[2];
$round=$datos[3];
$whiteplayer=$datos[4];
$blackplayer=$datos[5];
$result=$datos[6];
$eco=$datos[7];
$whiteelo=$datos[8];
$blackelo=$datos[9];
$plycount=$datos[10];
$eventdate=$datos[11];
$source=$datos[12];
$sourcedate=$datos[13];
$empty1=$datos[14];
For ($contador=15; $contador<=1000 ; $contador++)
{
$game=$game.$datos[$contador];
if (empty($datos[$contador])) {$ultimo=$contador; $contador=16; echo $contador;
break;}
}
$empty2=$datos[$ultimo];
$q = "INSERT INTO chesstemporal (event, site, date, round, whiteplayer, blackplayer, result, eco, whiteelo, blackelo, plycount, eventdate, source, sourcedate, empty1, game, empty2) values ('$event', '$site', '$date', '$round', '$whiteplayer', '$blackplayer', '$result', '$eco', '$whiteelo', '$blackelo', '$plycount', '$eventdate', '$source', '$sourcedate', '$empty1', '$game', '$empty2')";
mysql_query($q, $link);
mysql_close($link);
El archivo del cual lee es el siguiente:
Cita: [Event "Gausdal"]
[Site "?"]
[Date "1992.??.??"]
[Round "?"]
[White "Kramnik, Vladimir"]
[Black "Lerner, K."]
[Result "1-0"]
[ECO "A01"]
[WhiteElo "2590"]
[BlackElo "2515"]
[PlyCount "79"]
[EventDate "1992.??.??"]
[Source "ChessBase"]
[SourceDate "1991.10.01"]
1. b3 e5 2. Bb2 d6 3. g3 Nf6 4. Bg2 Be7 5. e3 Nc6 6. d3 O-O 7. Nf3 h6 8. c4 Be6
9. O-O Qd7 10. d4 exd4 11. exd4 Bf5 12. a3 Rae8 13. d5 Nb8 14. Nc3 Bd8 15. Nd4
Bh3 16. Qd3 Re5 17. Nce2 Bxg2 18. Kxg2 Rfe8 19. Nf4 Re4 20. Rad1 Na6 21. b4 Nb8
22. Nb3 g5 23. Nd2 gxf4 24. Bxf6 Re2 25. Bc3 Qg4 26. Qd4 Kh7 27. Rde1 c5 28.
Qd3+ f5 29. Rxe2 Rxe2 30. bxc5 dxc5 31. Nf3 Re4 32. d6 Nd7 33. Qd5 Qg6 34. Qxb7
Qxd6 35. Be5 Qd3 36. Bxf4 Bf6 37. Qc6 Re7 38. Rc1 Qe4 39. Qd6 Qb7 40. Rd1 1-0
[Event "Dortmund (open)"]
[Site "?"]
[Date "1992.??.??"]
[Round "?"]
[White "Kramnik, Vladimir"]
[Black "Levin, F."]
[Result "1-0"]
[ECO "A01"]
[WhiteElo "2590"]
[BlackElo "2445"]
[PlyCount "63"]
[EventDate "1992.??.??"]
[Source "ChessBase"]
[SourceDate "1992.02.01"]
1. b3 d5 2. Bb2 Nf6 3. e3 g6 4. c4 dxc4 5. Bxc4 Bg7 6. Nf3 c5 7. a3 O-O 8. b4
Nbd7 9. O-O b6 10. bxc5 bxc5 11. Be2 Qb6 12. Bc3 Ba6 13. a4 Bxe2 14. Qxe2 Qe6
15. Na3 Nb6 16. Qa6 Qd7 17. Qb5 Nbd5 18. Be5 Qe6 19. Rfc1 Nd7 20. Bxg7 Kxg7 21.
Qc4 Rfc8 22. Rab1 N7b6 23. Qh4 f6 24. a5 Nd7 25. Qc4 Rab8 26. h3 Nc7 27. Qa4
Na6 28. Nb5 Qc6 29. Qc4 Ra8 30. Nfd4 Ne5 31. Nxc6 Nxc4 32. Nbxa7 1-0
[Event "Wien"]
[Site "?"]
[Date "1996.??.??"]
[Round "?"]
[White "Kortchnoi, V."]
[Black "Kramnik, Vladimir"]
[Result "0-1"]
[ECO "A06"]
[WhiteElo "2635"]
[BlackElo "2765"]
[PlyCount "84"]
[EventDate "1996.??.??"]
[Source "ChessBase"]
[SourceDate "1996.06.01"]
1. Nf3 d5 2. b3 c5 3. e3 Nf6 4. Bb2 e6 5. c4 dxc4 6. bxc4 Nc6 7. Be2 Be7 8. O-O
O-O 9. Qc2 b6 10. a3 Bb7 11. Ng5 h6 12. Nh3 Rc8 13. d3 Rc7 14. f4 Ne8 15. f5
Bg5 16. Nxg5 Qxg5 17. Rf3 Ne7 18. e4 exf5 19. Rg3 Qh4 20. Nc3 fxe4 21. dxe4 Ng6
22. Nd5 Bxd5 23. exd5 Nd6 24. Rf1 Re8 25. Bd3 Ne5 26. a4 Rce7 27. Rh3 Qg5 28.
Rg3 Qh4 29. Rh3 Qg4 30. Rg3 Qd7 31. Qd2 Ng6 32. Qc3 Ne5 33. Qc1 f6 34. Bxe5
fxe5 35. Qxh6 e4 36. Qh5 Re5 37. Qg6 exd3 38. Rh3 Rf5 39. Qh7+ Kf8 40. Rxf5+
Nxf5 41. Rf3 Re5 42. g4 d2 0-1
[Event "Moskva (open)"]
[Site "?"]
[Date "1992.??.??"]
[Round "?"]
[White "Sturua, Z."]
[Black "Kramnik, Vladimir"]
[Result "0-1"]
[ECO "A07"]
[WhiteElo "2545"]
[BlackElo "2625"]
[PlyCount "72"]
[EventDate "1992.??.??"]
[Source "ChessBase"]
[SourceDate "1992.10.01"]
1. Nf3 d5 2. g3 c6 3. Bg2 Bg4 4. O-O Nd7 5. d3 Ngf6 6. Nbd2 e5 7. e4 Bd6 8. h3
Bh5 9. b3 O-O 10. Bb2 Re8 11. Re1 a5 12. a3 b5 13. Nf1 dxe4 14. dxe4 Nc5 15.
N1d2 Qc7 16. Qc1 Nfd7 17. Nh4 Ne6 18. Ndf3 f6 19. Nf5 Bf8 20. Re3 Bf7 21. Qe1
g6 22. N5h4 c5 23. Bf1 Nd4 24. Qd1 Rad8 25. Nxd4 cxd4 26. Re1 Qc6 27. Nf3 Nc5
28. Bd3 Nxd3 29. Qxd3 a4 30. Nd2 Bh6 31. Kh2 Rc8 32. Rac1 Bc4 33. bxc4 bxc4 34.
Nxc4 Bxc1 35. Nxe5 Qxc2 36. Qf3 Bxb2 0-1
etc.
En MySQL, cree 17 columnas, a saber: 14 para las 14 primeras filas, la columna 15 es una fila vacia (empty1), la columna 16 es
Cita: 1. Nf3 d5 2. g3 c6 3. Bg2 Bg4 4. O-O Nd7 5. d3 Ngf6 6. Nbd2 e5 7. e4 Bd6 8. h3
Bh5 9. b3 O-O 10. Bb2 Re8 11. Re1 a5 12. a3 b5 13. Nf1 dxe4 14. dxe4 Nc5 15.
N1d2 Qc7 16. Qc1 Nfd7 17. Nh4 Ne6 18. Ndf3 f6 19. Nf5 Bf8 20. Re3 Bf7 21. Qe1
g6 22. N5h4 c5 23. Bf1 Nd4 24. Qd1 Rad8 25. Nxd4 cxd4 26. Re1 Qc6 27. Nf3 Nc5
28. Bd3 Nxd3 29. Qxd3 a4 30. Nd2 Bh6 31. Kh2 Rc8 32. Rac1 Bc4 33. bxc4 bxc4 34.
Nxc4 Bxc1 35. Nxe5 Qxc2 36. Qf3 Bxb2 0-1
En el cual uni las filas con un bucle y la columna 17 es la fila vacia final (empty2) , antes del siguiente bloque. Esta ultima es la que quiero detectar (con la etiqueta "empty") y me coloca todos los bloques en la penultima columna (la 16) mientra que la 17 queda vacía.
Hola a todos, explicaré mi problema en la forma más sencilla posible:
1) Tengo un archivo de texto
2) La información está en filas, pero en forma de bloques
Fila 1 ------- Aca empieza el bloque 1
Fila 2
Fila 3
Fila = " "
Fila 4
Fila 5
Fila 6
Fila = " " .........Aca termina el bloque 1
Fila 1 -------Aca empieza el bloque 2
Fila 2
3) Las filas 1, 2 y 3 se mantienen siempre. O sea que están siempre. Las filas = "" también están siempre. Las filas 4, 5 y 6 varían entre los bloques (podría ser que esté la 4 solamente, y en otro bloque estar 4, 5, 6, 7, 8, 9 y 10). O sea, en un bloque podría haber 3 filas y en otro 7 filas, etc.
4) Siempre al final del bloque hay una línea vacía.
Lo que quiero es poner la información de cada bloque en una fila de una tabla con 17 campos en MySQL. Las filas 4, 5, 6,etc, son colocadas en una unica variable. Ahi esta mi problema, ese campo (llamado $game) me mete no solo 4, 5, 6, sino todos los bloques en una sola columna.
Aca está el código (son 17 columnas, el esquema anterior es para simplificar el problema)
Cita: $lines = file('kramnik.pgn');
foreach ($lines as $line_num)
{echo "".$line_num;
$datos[] = $line_num;}
foreach ($datos as $line_num)
/*{echo "<br>cosa:".$line_num;} */
$event = $datos[0];
$site=$datos[1];
$date=$datos[2];
$round=$datos[3];
$whiteplayer=$datos[4];
$blackplayer=$datos[5];
$result=$datos[6];
$eco=$datos[7];
$whiteelo=$datos[8];
$blackelo=$datos[9];
$plycount=$datos[10];
$eventdate=$datos[11];
$source=$datos[12];
$sourcedate=$datos[13];
$empty1=$datos[14];
For ($contador=15; $contador<=1000 ; $contador++)
{
$game=$game.$datos[$contador];
if (empty($datos[$contador])) {$ultimo=$contador; $contador=16; break;}
}
$empty2=$datos[$ultimo];
$q = "INSERT INTO chesstemporal (event, site, date, round, whiteplayer, blackplayer, result, eco, whiteelo, blackelo, plycount, eventdate, source, sourcedate, empty1, game, empty2) values ('$event', '$site', '$date', '$round', '$whiteplayer', '$blackplayer', '$result', '$eco', '$whiteelo', '$blackelo', '$plycount', '$eventdate', '$source', '$sourcedate', '$empty1', '$game', '$empty2')";
mysql_query($q, $link);
mysql_close($link);
La variable $game contiene las filas 4, 5, y 6 del primer bloque más todo el resto de la información (es decir, todos los demás bloques).
Quiero que esta información pase a la fila correspondiente: EL bloque 2 a la fila 2, el bloque 3 a la fila 3, y así sucesivamente. Cualquier consulta, estoy inmediatamente disponible. Gracias