1

I have a conf file like this: http://pastie.org/768582 and my goal is to get in an array the comments and the key/value of each keys.

array( array(

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

    'key' => "PROJECT_NAME",

    'value' => "JMK",
),

)

I would know what algoritm do I have to use?

I have already transform the content of the configuration file to an array (line by line) with explode() function.

Now I am trying to get all the comment lines while next line begins with '# ' and the couple key/value but it is here that I have trouble.

If someone have an idea it would be nice. Thx.

3 Answers 3

1

This will get you the key/value pairs, but not the comments:

$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;
  }
}
Sign up to request clarification or add additional context in comments.

Comments

1

here's one way

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

output

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
        )

)

Comments

0

You could try parse_ini_file(), the format looks compatible. It won't process the comments, though.

2 Comments

unfortunately the file doesn't seems to be well formated. See the comments '#' instead of ';' the first special character like '(' outputs an error. I think I will do otherwise.
Infact the doxygen configuration file looks similary to a Makefile. I will look if PHP can parse easily Makefile.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.