我有一些来自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 : #transcode{vcodec="h264"}:standard{access=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支持的格式(哈希表等)的方法吗?
答案 0 :(得分:2)
这个数据非常接近YAML,也许是故意的。您需要做的就是
添加初始行---
以标记内容的开头
删除所有评论,例如( 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 => "#transcode{vcodec=\"h264\"}:standard{access=http,mux=ts,dst=xxx.xxx.xxx.xxx:6690/cam1}",
type => "broadcast",
},
},
schedule => undef,
},
}
答案 1 :(得分:1)
你可能正在尝试已经完成的事情 - 检查这个SF项目:
http://sourceforge.net/projects/p5vlc/files/latest/download?source=files