我有一个包含下一个结构的文件:
concept [at0000] -- Blood Pressure language original_language = translations = author = ["organisation"] = ["email"] = > accreditation = > > description original_author = ["organisation"] = ["email"] = ["date"] = > details = purpose =
我需要打开并解析这个文件,但我必须承认每一行的缩进,因为缩进代表了层次结构。 PHP中是否有任何方法可以逐行分析缩进,包括行的开头,中间还是末尾?
答案 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)
您可以使用ltrim
和rtrim
功能。
例如使用以下代码:
$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。