【发布时间】:2015-08-03 21:08:29
【问题描述】:
我有一个纯文本数据文件,其中包含一个嵌套的项目列表,如下所示:
Group: Folder
Group: Subfolder1
Group: Subfolder2
Group: Folder2
Group: Subfolder1
Group: NestedSubfolder1
...等等。 (每个文件夹名称都会在列表中自动添加“组:”;文件夹也没有命名结构或约定,我将它们标记为 try 以避免使示例复杂化)此文件经常更新,因此不能手动修改它,而且我无法控制输出的排列/格式。
我正在使用的读取此文件的应用程序将其处理为大量(源代码长约四千行)单行文本,没有换行符或分隔符/分隔符,因此它最终看起来像这样:
Group: Folder Group: Subfolder1 Group: Subfolder2 Group: Folder2 Group: Subfolder1 Group: NestedSubfolder
现在,这是我的问题。为了使用它需要进行格式化的方式是这样的:
Folder/Subfolder1
Folder/Subfolder2
Folder2/Subfolder1/NestedSubfolder1
对于我的正常用例,RegEx 或其他一些巧妙的过滤可以让我获得我需要的信息,但由于它没有分隔符、换行符或分隔符,并且需要自动复制文本并智能地粘贴到适当的位置,我有点不知所措。用于解析这些数据并对其采取行动的应用程序可以运行 JavaScript (Rhino) 脚本,因此理论上可以让应用程序运行将输出转换为格式正确、可用的纯文本的脚本。但是,我还不(完全)精通 JS;有没有人必须处理类似的任务,或者有任何聪明的想法来处理这种类型的列表,以便每个项目都包含它的完整路径?
【问题讨论】:
-
除了第一个文件夹外,它看起来分解如下:每个文件夹前面有4个字符的空格,每个子文件夹有8个,每个嵌套的子文件夹有12个。它们增加了每次4。那么您是否尝试过使用正则表达式在每个文件夹名称后添加一个换行符,然后根据每行上的空白量进行解析?
-
用“/”和“Group:\s+”替换换行+制表符。
-
@dandavis 我确实尝试过;不幸的是,它只处理子文件夹的第一个实例。因为父文件夹名称会留在第一个子文件夹的前面,所以没有为其余项目提供路径。例如,我在第一个实例中得到了“Folder/Subfolder1”,但第二个实例留下了“Subfolder2”,前面没有路径。
-
@zfrisch 我认为你绝对是在正确的轨道上;我现在正在尝试给自己上 JS 速成课程,这样我就可以弄清楚如何获取父文件夹名称,然后在每个后续项目中添加父名称,其中包含大量空格。然后,当下一行的空格数减少时迭代该过程。不确定我是否描述了最好的方法,但我认为这就是您的建议。
-
@vertigozero1 今天我会再看一下这个问题。不过要清楚一点,您需要将它正确格式化为第二个示例中的 folder\folder2\etc ,这是一个长字符串?还是从第一个嵌套换行符和间距的?
标签: javascript list rhino text-parsing