Domanda

Non sono il migliore in PHP e sarei estremamente grato se qualcuno potesse aiutarmi. Fondamentalmente ho bisogno di analizzare ogni riga di un feed di dati e ottenere solo ogni bit di informazione tra ogni " | " - Quindi posso aggiungerlo a un database. Penso di riuscire a ottenere le informazioni tra le "quotazioni |" usando esplodi, ma ho bisogno di un po 'di aiuto per analizzare ogni riga da un file di testo come singolare. Infatti per renderlo ancora più semplice, ho solo bisogno che usi ogni riga di una variabile, invierò il contenuto alla variabile usando un'area di testo e un modulo. Qualsiasi aiuto sarebbe molto apprezzato!

È stato utile?

Soluzione

Puoi leggere un file in un array di righe ed eseguire tutte le divisioni con:

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

Se hai già tutto il testo in una variabile come hai detto (ad es. con qualcosa come file_get_contents ()), puoi prima esplodere su \ n e poi fare la stessa istruzione foreach di cui sopra.

Altri suggerimenti

Se stai leggendo il tuo post di textarea, puoi usare la funzione esplodi usando il carattere di nuova riga come separatore per ottenere ogni " line " nella variabile come nuovo elemento di un array, puoi esplodere sugli elementi del tuo array.

vale a dire.

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

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

allora hai un array 2d dei tuoi elems.

Se stai leggendo un file, puoi semplicemente usare la funzione file documentata qui:

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

per ottenere ogni riga del file come elemento di un array.

Esiste una libreria di analisi PHP già pronta che può rilevare automaticamente il formato CSV.

Esempio:

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

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

È disponibile per il download qui , e c'è della documentazione qui .

Se il file è piccolo, è possibile utilizzare file () t o leggerlo in un array , una riga per elemento.

In mancanza, leggi il file in loop utilizzando fgets ()

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

Puoi usare esplodi per ottenere entrambi:

$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
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top