2017-06-21 7 views
0

Ich habe ein Verzeichnis mit mehr als 10K JSON-Dateien und ich muss sie alle analysieren. Die Parse-Funktion funktioniert sehr gut für 1 Datei, aber ich sehe nicht, wie man jede Datei im Verzeichnis wiederholt.Wie zu `file_get_contents()` mehrere Dateien?

Controler:

public function parseFile() 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $em->getRepository('NcstoxBundle:JsonTextMining'); 

    foreach (glob('*.json') as $file) { 

     set_include_path('/home/landreau/workspace/NCSTOX/web/assets/json/sample-json'); 
     $json = file_get_contents($file, FILE_USE_INCLUDE_PATH); 
     $array = json_decode($json, true); 
     var_dump($json); 
     print_r($array); 


     foreach ($array as $item) { 
      $jsonTextMining = new JsonTextMining(); 
      $jsonTextMining->setSolrId($item['id']); 
      $jsonTextMining->setOriginalPaper($item['Original_paper']); 
      $jsonTextMining->setAnnotatedFile($item['Annotated_file']); 
      $jsonTextMining->setTitle($item['Title']); 
      foreach ($item['Molecule'] as $mol) { 
       $jsonTextMining->setMoleculeName($mol['Main name']); 
      } 
      $jsonTextMining->setSynonymName($item['Molecule'][0]['Synonyms']); 
      $jsonTextMining->setKeyword($item['ToxKeywords']); 
      $jsonTextMining->setImportantSentence($item['Important_sentences'][0]); 


      $em = $this->getDoctrine()->getManager(); 
      $em->persist($jsonTextMining); 
     } 
    } 
    $em->flush(); 


    return new Response('Saved new document with id '); 
} 

Ich versuchte glob() Funktion, aber die Schleife endet ohne etwas zu speichern.

Hat jemand eine bessere Syntax kennen, um alle Dateien im Verzeichnis zu durchlaufen und dann file_get_contents() sie?

+1

Verwenden Sie die Dateisystem-Komponente symfony alle Dateien in diesem Verzeichnis verwenden können, lesen und dann für jede Datei, um den Inhalt zu bekommen. –

+0

Danke, ich habe mir nur die Dokumentation darüber angesehen und es könnte eine gute Lösung sein und ich habe etwas gelernt – Gy0m

Antwort

0

Ich bevorzuge die Verwendung DirectoryIterator für das Durchlaufen von Dateien in einem Verzeichnis, da es Ihnen integrierte Methoden für alle verschiedenen Parsing, die Sie wahrscheinlich tun werden. instanziiert es nur mit dem Verzeichnisnamen und dann iterieren es:

foreach (new DirectoryIterator('/path/to/files') as $file) { 
    if ($file->getExtension() === 'json') { 
     $array = json_decode(file_get_contents($file->getPathname()), true); 
     .... 
    } 
} 
+0

Diese Lösung scheint eine gute zu sein, aber jetzt bekomme ich einen Fehler 'Warnung: Ungültiges Argument für foreach()' für meine anderen Schleife, die gut funktionierte kurz vor – Gy0m

+0

Poste diese Codezeile ... –

+0

es ist die 'foreach ($ array als $ item) {' – Gy0m

Verwandte Themen