Extraer datos de archivo txt a MySQL

¿Por qué no me captura y graba? El código me muestra en pantalla... Linea por linea lo que hay en el archivo datos.txt... Osea que esta parte esta buena...
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "
<p> $num fields in line $row: <br /></p>
\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n"; // perfecto... Lo muestra bien...
    }
Quiero capturar lo 20 primeros caracteres de cietas lineas... Y grabarlos en la tabla datos. Hace la grabación pero con los datos en blanco...
No entiendo muy bien lo que hace esto:
for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
¿Creo qué imprime en pantalla carácter por carácter? Entonces la captura debe estar dentro de este for?. Si es así, ¿Cómo la haría?
el codigo completo es....
<?php require_once('Connections/miconexion.php'); ?>
......
<?php
$row = 1;
$handle = fopen("datos.txt", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "
<p> $num fields in line $row: <br /></p>
\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
    }
 if ($row=310){
   $dpto=substr($data[$c],1,20);
 }
 if ($row=319){
   $dpto1=substr($data[$c],1,20);
 }
 if ($row=327){
   $dpto2=substr($data[$c],1,20);
 }
 if ($row=347){
   $dpto3=substr($data[$c],1,20);
 }
}
fclose($handle);
?>
<?
// grabar en la tabla datos
 $sQuest = "INSERT INTO datos (var1, var2, var3, var4) values ('$dpto', '$dpto1', '$dpto2', '$dpto3')";
 if(!mysql_query($sQuest))
 echo "Error al insertar datos";
 else
?>
</body>
--------------------------------------------------------------------

1 respuesta

Respuesta
1
Lo que ocurre es que en lugar de tener una cadena, tienes una matriz de caracteres.
Para que te funcione, deberías primero convertir la matriz a una cadena, y luego leer de esta cadena:
$cadena = implode("", $data);
if ($row=310){
   $dpto=substr($cadena,1,20);
 }
David, gracias por responderme. Te cuento algo más de lo que estoy haciendo a ver si me puedes ayudar.
En datos.txt está grabado el código de un HTML que descargo de la web. En las lineas 310... 347 hay 4 datos dentro de una tabla, esos datos no varían la posición aunque la consulta a la página se haga con otras variables. Estoy intentando hacer un scraping.
Al adicionar:
$cadena = implode("", $data);
if ($row=310){
   $dpto=substr($cadena,1,20);
 }
y grabar en la tabla datos, me almacena:  /HTML>. si elimino: substr( y grabo $cadena me almacena en la tabla: </HTML>
pienso, no se usted que opina: si primero localizo: <br>, </style>
, </script>
,
<tr>
... etc y lo reemplazo por "", entonces datos.txt ya no seria un html puro... y me permitiría extrael las lineas que necesito...
¿Qué opina usted?... pero hay un problema: no se como reemplazar eso...
¿Me puede ayudar para probar esta idea?
Gracias DAvid.
Si estás seguro de la posición de lo que buscas, no tendrías que tener problema.
Si no siempre aparece en la posición que crees, quizás debas buscar algún texto que te sirva de referencia con strstr()
Ten en cuenta que tu me has indicado que lo que buscas está en las primeras 20 posiciones. Pero eso suponiendo que estemos hablando del código fuente. No cuentes los caracteres en pantalla.
Si, la posición es siempre la misma, la longitud puede variar entre 15 a 25 caracteres pero no importa, con los 20 queda bien.
Necesito ahora un scripts que me ayude a eliminar los caracteres que no me interesan, tales como ></tr...br etc.
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas