PHP - 带有缩进的分析器文件

时间:2014-08-05 19:22:15

标签: php indentation

我有一个包含下一个结构的文件:


    concept
        [at0000]    -- Blood Pressure
    language
        original_language = 
        translations = 
                author = 
                    ["organisation"] = 
                    ["email"] = 
                >
                accreditation = 
            >
        >
    description
        original_author = 
            ["organisation"] = 
            ["email"] = 
            ["date"] = 
        >
        details = 
                purpose = 

我需要打开并解析这个文件,但我必须承认每一行的缩进,因为缩进代表了层次结构。 PHP中是否有任何方法可以逐行分析缩进,包括行的开头,中间还是末尾?

3 个答案:

答案 0 :(得分:1)

//咆哮

很简单:谁提供了这样一个糟糕的数据结构来解析。 它是2014年.XML到处都是轻量级的JSON。 我们得到了什么?甚至不是CSV:)

//咆哮

也许固定的列宽解析器适合: https://github.com/t-geindre/fixed-column-width-parser

基本上你得到$lines = file("file.txt");

的行

然后检测每条线前面的空格或标签。

<强>更新

原来这个&#34;数据&#34;有一个结构。 数据结构&#34;原型定义语言&#34; (ADL)在ISO 13606-2中描述。

我还要指出OpenEHR。

这是Ruby中的解析器ADL v1.4:

这应该让你非常接近解决方案。 希望这有点帮助..

答案 1 :(得分:0)

您可以使用ltrimrtrim功能。

例如使用以下代码:

$line = '    concept';

echo strlen(ltrim($line));
echo strlen($line);

您可以在行的开头计算带有和不带空格的字符串的长度。

但是我不知道你想要计算行中间的缩进是什么意思。在这种情况下,您应该使用substr函数在您期望缩进时转到该位置,然后再次使用ltrim和strlen来计算子字符串开头的空格。

如果代码中包含非ASCII字符,您可能还想使用Mb string functions

对于解析行,您只需使用file()函数

即可

答案 2 :(得分:0)

ADL没有PHP解析器。但是可以使用CKM(http://ckm.openehr.org/ckm/)或原型编辑器(http://www.openehr.org/downloads/modellingtools)将ADL转换为XML。

您应该在PHP中使用XML。