Frage

Ich bin nicht die beste in PHP und wäre sehr dankbar, wenn jemand helfen könnte. Grundsätzlich muss ich jede Zeile eines Datafeed analysieren und erhalten nur jedes Bit von Informationen zwischen den einzelnen „|“ - dann kann ich es in eine Datenbank hinzuzufügen. Ich glaube, ich handhaben kann, die Informationen aus dem Bereich zwischen dem immer „|“ 's durch explodieren verwenden, aber ich brauche ein bisschen Hilfe mit jeder Zeile aus einer Textdatei als singulären Parsen. Infact es noch einfacher zu machen, ich brauche es nur jede Zeile einer Variablen zu verwenden, werde ich mit dem variablen Inhalt senden Sie einen Textbereich und ein Formular. Jede Hilfe wäre sehr geschätzt!

War es hilfreich?

Lösung

Sie können eine Datei in ein Array von Zeilen lesen und alle die Aufspaltung tun mit:

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

Wenn Sie bereits den gesamten Text in einer Variablen haben, wie Sie gesagt haben (zum Beispiel mit so etwas wie file_get_contents ()), können Sie auf \ n explodieren und dann das gleiche tun foreach-Anweisung wie oben.

Andere Tipps

Wenn Sie aus Ihrem Textbereich Post lesen, können Sie die explodieren verwenden Funktion des Newline-Zeichen verwendet als Trennzeichen jede „Linie“ zu bekommen in den Variablen als neues Element eines Arrays, dann können Sie explodieren auf Array-Elemente.

d.

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

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

, dann haben Sie eine 2D-Array Ihres elems.

Wenn Sie aus einer Datei lesen, können Sie einfach die Datei Funktion hier dokumentiert verwenden:

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

jede Zeile der Datei als ein Element eines Arrays zu erhalten.

Es gibt eine Fertig- PHP-Parsing-Bibliothek, die das CSV-Format automatisch erkennen kann.

Beispiel:

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

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

Es ist verfügbar hier zum Download, und es gibt einige Dokumentation hier .

Wenn die Datei klein ist, können Sie Datei () verwenden, t o es in ein Array lesen , eine Zeile pro Element.

Gelingt das nicht, die Datei in Schleife liest mit fgets ()

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

Sie können mit explode beide bekommen:

$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
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top