将选项卡式文本转换为 Perl 数据格式

Posted

技术标签:

【中文标题】将选项卡式文本转换为 Perl 数据格式【英文标题】:Convert tabbed text into Perl data format 【发布时间】:2012-07-20 06:25:08 【问题描述】:

我有一些来自 VLM telnet 服务的数据:

show
    media : ( 1 broadcast - 0 vod )
        cam1
            type : broadcast
            enabled : yes
            loop : no
            inputs
                1 : rtsp://xxx:xxx@xxx.xxx.xxx.xxx:xxx/xxxx/xxx.xxx
            output : #transcodevcodec="h264":standardaccess=http,mux=ts,dst=xxx.xxx.xxx.xxx:6690/cam1
            options
            instances
                instance
                    name : default
                    state : playing
                    position : 0,000000
                    time : 0
                    length : -1
                    rate : 1,000000
                    title : 0
                    chapter : 0
                    can-seek : 0
                    playlistindex : 1
    schedule

有没有办法将此数据转换为 XML 或 JSON 或其他 Perl 支持的格式(哈希表等)?

【问题讨论】:

【参考方案1】:

这些数据非常接近 YAML,也许是故意的。你需要做的就是

添加一个初始行---来标记内容的开始

删除所有 cmets,如 ( 1 broadcast - 0 vod )

在所有当前不包含冒号的行中添加一个尾随冒号

除了media 节点不能既等于评论又等于cam1 节点的容器之外,现有的评论就可以了。

此程序编辑数据以形成正确的 YAML,将其加载到 Perl 哈希中并转储结果。

use strict;
use warnings;

use YAML 'Load';

open my $fh, '<', 'VLM.txt' or die $!;

my $yaml = "---\n";

while (<$fh>) 
  s/\s*\(.*//;
  s/$/ :/ unless /:/;
  $yaml .= $_;


my $data = Load($yaml);

use Data::Dump;
dd $data;

输出


  show => 
    media => 
      cam1 => 
        enabled   => "yes",
        inputs    =>  1 => "rtsp://xxx:xxx\@xxx.xxx.xxx.xxx:xxx/xxxx/xxx.xxx" ,
        instances => 
                       instance => 
                         "can-seek"      => 0,
                         "chapter"       => 0,
                         "length"        => -1,
                         "name"          => "default",
                         "playlistindex" => 1,
                         "position"      => "0,000000",
                         "rate"          => "1,000000",
                         "state"         => "playing",
                         "time"          => 0,
                         "title"         => 0,
                       ,
                     ,
        loop      => "no",
        options   => undef,
        output    => "#transcodevcodec=\"h264\":standardaccess=http,mux=ts,dst=xxx.xxx.xxx.xxx:6690/cam1",
        type      => "broadcast",
      ,
    ,
    schedule => undef,
  ,

【讨论】:

【参考方案2】:

您可能正在尝试一些已经完成的事情 - 检查这个 SF 项目:

http://sourceforge.net/projects/p5vlc/files/latest/download?source=files

【讨论】:

有帮助,但不完全是我需要的。我会尝试根据它写一些东西。谢谢。

以上是关于将选项卡式文本转换为 Perl 数据格式的主要内容,如果未能解决你的问题,请参考以下文章

excel 文本转日期

如何将excel的数据输出到文本文件中并设定长

JAVA中导出Excel将全部单元格设置为文本样式,就是导出的没有数据的单元格类型的设置

如何把DAT格式转换为EXCEL表格?

我们如何使用 perl 将数据格式化为表格格式

如何将Excel文档转换成UTF-8格式的文本文件