- 论坛徽章:
- 0
|
- #!/usr/bin/perl -w
- # SCRIPT: gen_body.pl
- # AUTHOR: Ray001
- # DATE: 2010/07/20
- # REV: 1.00
- # For Development
- #
- # PURPOSE:
- # 根据头文件自动生成报文体解析函数(部分代码)
- use strict;
- if ( @ARGV < 1 ) {
- die "Usage: gen_body.pl TABLE \n";
- }
- # 如果打开配置文件失败, 则报错退出
- open CFG_FILE, "<header.h" or die "Can't open head file! ($!) ";
- # 读取整个文件
- $/ = undef;
- $_ = <CFG_FILE>;
- # 初始化列数组为空
- my @array_col = ();
- # 匹配表对应的列的内容
- if (/struct $ARGV[0](.*?)\}/s) {
- @array_col = split /\n/, $1;
- }
- # 不匹配则发出警告并退出
- else {
- die "Table $ARGV[0] no matched!";
- }
- my $start_pos=91;
- print ( ' strncpy ( prt_body->lsh, prs_lsh, 16 );' );
- print ( "\n" );
- # 遍历数组
- foreach (@array_col) {
- # 跳过不匹配的行, $1匹配表名, $2匹配长度
- next unless /\s+char\s+(.*)\[([0-9]+)\]/;
- next if ( $1 eq "lsh" );
- # C风格字符串,实际长度要减一
- my $length=$2-1;
- print ( " strncpy ( prt_body->$1, outBuf + $start_pos, $length );\n" );
- $start_pos+=$length;
- }
复制代码 数了一下,第6个perl写的小程序。平时用得太少,进步慢啊! |
|