2010-01-06 4 views
1

J'ai un fichier conf comme ceci: http://pastie.org/768582 et mon but est d'obtenir dans un tableau les commentaires et la clé/valeur de chaque touche.Algorithme pour analyser un fichier de configuration en php (fichier Doxygen)

array( array(

'comment' => "The PROJECT_NAME tag is a single", 

    'key' => "PROJECT_NAME", 

    'value' => "JMK", 
), 

)

Je sais ce que Algoritm dois-je utiliser?

J'ai déjà transformé le contenu du fichier de configuration en un tableau (ligne par ligne) avec la fonction explode().

Maintenant, j'essaie d'obtenir toutes les lignes de commentaires alors que la ligne suivante commence par '#' et le couple clé/valeur, mais c'est ici que j'ai des problèmes.

Si quelqu'un a une idée ce serait bien. THX.

Répondre

0

Vous pouvez essayer parse_ini_file(), le format semble compatible. Il ne traitera pas les commentaires, cependant.

+0

malheureusement le fichier n'a pas Semble être bien formées. Voir les commentaires '#' au lieu de ';' le premier caractère spécial comme '(' sort une erreur Je pense que je ferai autrement – toddoon

+0

Enfait le fichier de configuration doxygen ressemble à un Makefile.Je regarderai si PHP peut facilement analyser Makefile. – toddoon

1

Cela vous obtiendrez les paires clé/valeur, mais pas les commentaires:

$options = array(); 

foreach ($line as $l) 
{ 
    $l = trim($l); 
    if (strlen($l) && substr($l, 0, 1) != '#') 
    { 
    list($key, $value) = explode("=", $l); 

    // remove whitespace from the end of the config key 
    $key = rtrim($key); 

    $options[$key] = $value; 
    } 
} 
1

est ici une façon

$content = file_get_contents("file"); 
$s = preg_split("/#--*/",$content); 
$y = preg_split("/\n\n/",end($s)); 
for($i=0;$i<count($y)-1;$i++){ 
    if ($y[$i]){ 
     if (strpos($y[$i],"#")!==FALSE){ 
      $comment="$y[$i]\n"; 
      $conf=$y[$i+1]; 
      $cs = array_map(trim,explode("=",$conf)); 
      $A["comment"]=$comment; 
      $A["key"]=$cs[0]; 
      $A["value"]=$cs[1]; 
      $TA[]=$A; 
     } 
    } 
} 
print_r($TA); 

sortie

Array 
(
    [0] => Array 
     (
      [comment] => # This tag specifies the encoding used for all characters in the config file 
# that follow. The default is UTF-8 which is also the encoding used for all 
# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
# iconv built into libc) for the transcoding. See 
# http://www.gnu.org/software/libiconv for the list of possible encodings. 

      [key] => DOXYFILE_ENCODING 
      [value] => UTF-8 
     ) 

    [1] => Array 
     (
      [comment] => # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
# by quotes) that should identify the project. 

      [key] => PROJECT_NAME 
      [value] => JMK 
     ) 

    [2] => Array 
     (
      [comment] => # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
# This could be handy for archiving the generated documentation or 
# if some version control system is used. 

      [key] => PROJECT_NUMBER 
      [value] => 10 
     ) 

) 
Questions connexes