【问题标题】:Parsing a text config file in perl在 perl 中解析文本配置文件
【发布时间】:2014-09-04 22:35:55
【问题描述】:

大家好,我有一个如下所示的配置文本文件。

$name
search_key,0x0

$name2
search_key2,0x1

每个块可以有多个条目,如下所示

$name
search_key1,0x1
search_key2,0x0

也可能有多个值。

$name
search_key, 0x1, 0x0

我的目标是使用每个 $name 重命名文件,然后将在文件中搜索关键字并更改值,例如 search_key1 的原始值可能为 0x0 将更改为 0x1。

我已经完成了我打算做的第二部分,将值硬编码到我的脚本中,但我一生都无法弄清楚我应该如何解析文件并且我被卡住了关于它这么久我所有的想法都是陈旧的任何人有什么建议吗?我什至不知道现阶段该往哪个方向走

【问题讨论】:

  • 我很困惑 - “我一辈子都想不出我应该用什么方法解析文件” -> 解析配置文件?或者解析$name引用的文件?
  • > search_key1 的原始值可能为 0x0,将更改为 0x1 - 这是否意味着您需要读取和更新配置文件?
  • 好吧,很抱歉,我没有很好地解释这一点。 Carl 我说的是配置文件,Snoopy 配置文件不会更新我正在使用配置文件更改另一个文件中的二进制值,该文件重命名为 $name

标签: perl parsing text


【解决方案1】:

我建议使用 yaml 作为配置文件,而不是编写自己的解析器配置文件和解析器。

这就是像您这样的 yaml 数据文件的样子。

---
- file
- key:
    search_key:
      search: 0x1
  name: Name
- file
- key:
    search_key1:
      search: 0x1
    search_key2:
      search: 0x0
  name: Name2
- file
- key:
    search_key3:
      replace: 0x0
      search: 0x1
  name: Name3

数据可能如下所示:

my $data = [
    file => {
        name => 'Name',
        key  =>  { 'search_key' => { search => '0x1' } }
    },

    file => {
        name => 'Name2',
        key => {
            search_key1 => { search => '0x1' },
            search_key2 => { search => '0x0' }
        }
    },

    file => {
        name => 'Name3',
        key => {
            search_key3 => { search => '0x1', replace => '0x0' }
        }
    }
];

所以$data->[2]->{file}->{name} 将是Name3$data->[2]->{file}->{key}->{search_key3}->{search} 将是 0x1,关联的 ->{replace} 将是 0x0

如果以这种方式设置数据,则可以使用 for 循环遍历 $data 数组引用的元素。

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2012-10-25
    • 2023-03-15
    • 2012-02-21
    • 2011-08-29
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多