Pregunta

No soy el mejor en PHP y estaría extremadamente agradecido si alguien pudiera ayudar. Básicamente, necesito analizar cada línea de una fuente de datos y simplemente obtener cada bit de información entre cada " | " - Entonces puedo agregarlo a una base de datos. Creo que puedo manejar la información entre las de " | " ;, utilizando Explode, pero necesito un poco de ayuda para analizar cada línea de un archivo de texto como singular. Para que sea aún más sencillo, solo necesito usar cada línea de una variable, enviaré contenido a la variable mediante un área de texto y un formulario. Cualquier ayuda sería muy apreciada!

¿Fue útil?

Solución

Puedes leer un archivo en una matriz de líneas y hacer toda la división con:

$lines = file("filename");
foreach($lines as $line) {
    $parts = explode("|", $line);
    // do the database inserts here
}

Si ya tiene todo el texto en una variable como dijo (por ejemplo, con algo como file_get_contents ()), puede explotar en \ n primero y luego hacer la misma declaración de foreach que la anterior.

Otros consejos

Si estás leyendo tu publicación de área de texto, puedes usar la función de explosión usando el carácter de nueva línea como tu separador para obtener cada línea " " " en la variable como un nuevo elemento de una matriz, entonces puedes explotar en los elementos de tu matriz.

es decir,

$sometext = "balh | balh blah| more blah \n extra balh |some blah |this blah";

$lines = explode("\n", $sometext);
foreach($lines as $oneLine)
{
    $lineElements[] = explode("|", $oneLine);
}

entonces tienes una matriz 2D de tus elementos.

Si está leyendo un archivo, simplemente puede usar la función de archivo documentada aquí:

http://us2.php.net/manual/en/function .file.php

para obtener cada línea del archivo como un elemento de una matriz.

Hay una biblioteca de análisis PHP preparada que puede detectar automáticamente el formato CSV.

Ejemplo:

$reader = new Dfp_Datafeed_File_Reader();
$reader->setLocation('test.csv');

foreach ($reader AS $record) {
    print_r($record);
}

Está disponible para descargar aquí , y hay algo de documentación here .

Si el archivo es pequeño, puede usar file () t o leerlo en una matriz , una línea por elemento.

Si falla, lea el archivo en bucle utilizando fgets ()

$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
   $buffer = fgets($handle, 4096);
   echo $buffer;
}
fclose($handle);

Puedes usar explotar para obtener ambos:

$myFile = "File.txt";
$fh = fopen($myFile, 'r');
$data = fread($fh);
fclose($fh);
$newLines = explode("\n",$data);

foreach($newLines as $s)
{
  $parsed = explode("|",$s);
  foreach($parsed as $item)
  {
    // do your db load here
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top