2008-10-20 12 views
3

Je ne suis pas le meilleur à PHP et serait très reconnaissant si quelqu'un pouvait aider. Fondamentalement, j'ai besoin d'analyser chaque ligne d'un flux de données et juste obtenir chaque bit d'information entre chaque "|" - Alors je peux l'ajouter à une base de données. Je pense que je peux gérer obtenir les informations à partir entre le « | » s 'en utilisant exploser mais je besoin d'un peu d'aide avec l'analyse syntaxique de chaque ligne d'un fichier texte en tant que singulier. Enfait pour le rendre encore plus simple, j'ai juste besoin d'utiliser chaque ligne d'une variable, je vais soumettre le contenu à la variable en utilisant une zone de texte et un formulaire. Toute aide serait grandement appréciée!A Data Feed Parsing

Répondre

4

Vous pouvez lire un fichier dans un tableau de lignes et faire tout le partage avec:

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

Si vous avez déjà tout le texte dans une variable que vous avez dit (par exemple, avec quelque chose comme file_get_contents()), vous pouvez exploser sur \ n d'abord, puis faire la même chose pour chaque instruction que ci-dessus.

+0

@ zuk1: Cela fonctionnera si vous lisez un fichier réel. –

0

Si le fichier est petit, vous pouvez utiliser file() t o lire dans un tableau, une ligne par élément.

A défaut, lire le fichier en boucle en utilisant fgets()

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

Si vous lisez sur votre poste textarea, vous pouvez utiliser la fonction exploser en utilisant le caractère de saut de ligne comme séparateur pour obtenir chaque « ligne » dans la variable en tant que nouvel élément d'un tableau, alors vous pouvez faire exploser sur vos éléments de tableau.

à savoir

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

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

alors vous avez un tableau 2D de vos elems.

Si vous lisez sur un fichier, vous pouvez simplement utiliser la fonction de fichier documenté ici:

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

pour obtenir chaque ligne du fichier comme un élément d'un tableau.

+0

@ zuk1: Cela fonctionnera si vous ne lisez pas réellement un fichier. –

0

Vous pouvez utiliser explode pour obtenir les deux:

$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 
    } 
} 
1

Il y a une bibliothèque PHP analyse prêt à l'emploi qui peut détecter automatiquement le format CSV.

Exemple:

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

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

Il est disponible pour télécharger here, et il y a une documentation here.