Алгоритм разбора файла конфигурации в php (файл Doxygen) - PullRequest
1 голос
/ 06 января 2010

У меня есть файл конфигурации, подобный этому: http://pastie.org/768582, и моя цель - получить в массиве комментарии и ключ / значение для каждого ключа.

array( array(</p> <pre><code> 'comment' => "The PROJECT_NAME tag is a single", 'key' => "PROJECT_NAME", 'value' => "JMK", ),

)

Я бы знал, какой алгоритм я должен использовать?

Я уже преобразовал содержимое файла конфигурации в массив (строка за строкой) с помощью функции explode ().

Теперь я пытаюсь получить все строки комментариев, в то время как следующая строка начинается с '#' и пары ключ / значение, но именно здесь у меня возникают проблемы.

Если у кого-то есть идея, было бы неплохо. Thx.

Ответы [ 3 ]

1 голос
/ 06 января 2010

Это даст вам пары ключ / значение, но не комментарии:

$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 голос
/ 06 января 2010

вот один из способов

$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);

вывод

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
        )

)
0 голосов
/ 06 января 2010

Вы можете попробовать parse_ini_file(), формат выглядит совместимым. Тем не менее, комментарии не будут обрабатываться.

...