免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yilong777jp
打印 上一主题 下一主题

请教 文本文件转换的问题 [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
11 [报告]
发表于 2005-01-06 21:40 |只看该作者

请教 文本文件转换的问题

上面那個...
@ary = <FH>;;
$idx = 0;
for(@ary)
{

$idx++;
}
你的perl基礎不夠...先看看learning perl後再開始寫..會比較容易上手

论坛徽章:
0
12 [报告]
发表于 2005-01-06 21:43 |只看该作者

请教 文本文件转换的问题

但是新的命令开始又是从a到z的顺序了,不是接着上面命令的顺序了。。。

论坛徽章:
0
13 [报告]
发表于 2005-01-07 12:46 |只看该作者

请教 文本文件转换的问题

出差中,闲着无事,给你写一个吧


  1.   use strict;

  2.   my $i=0;
  3.   my $n=-3;
  4.   my @letter = ("a".."z");
  5.   @ARGV = glob "cpuinfo" or die "no file found";
  6.    $^I = "";
  7.    while (<>;) {
  8.      if($i==1){
  9.       s/^$letter[$n]: (.*)/ $1/;
  10.       $i++;
  11.       }
  12.      if(/MDR_LOAD <- 1, MDR_INST <- 0/){
  13.       chomp;
  14.       $i++;
  15.       }
  16.      if($i>;1){
  17.       s/^$letter[$n]: (.*)/$letter[$n-1]: $1/;
  18.       }

  19.      print;
  20.      $n++;
  21.    }

复制代码


  1. [root@mail workspace]# cat cpuinfo
  2. R2 <- R1 + (R4)
  3. opcode op_add_21_4
  4. comment proc_opcode := "01100110"; -- R2 <- R1+(R4)
  5. a: MDR <- mem[PC], PC <- PC + 1
  6. b: MAR_SRC <- R4, MAR_LOAD <- 1, ADDR_SEL <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
  7. c: MDR_SRC <- MEM, MDR_LOAD <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
  8. d: ALUs1_SRC <- R1, ALUs2_SRC <- MDR, ALU_FUNC <- alu_add, ALUOUT_DEST <- R2, ALUOUT_LOAD <- 1
  9. e: WB_DEST <- R2, REG_LOAD <- 1
  10. [root@mail workspace]#
  11. [root@mail workspace]# ./update_file.pl
  12. [root@mail workspace]# cat cpuinfo
  13. R2 <- R1 + (R4)
  14. opcode op_add_21_4
  15. comment proc_opcode := "01100110"; -- R2 <- R1+(R4)
  16. a: MDR <- mem[PC], PC <- PC + 1
  17. b: MAR_SRC <- R4, MAR_LOAD <- 1, ADDR_SEL <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
  18. c: MDR_SRC <- MEM, MDR_LOAD <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1 ALUs1_SRC <- R1, ALUs2_SRC <- MDR, ALU_FUNC <- alu_add, ALUOUT_DEST <- R2, ALUOUT_LOAD <- 1
  19. d: WB_DEST <- R2, REG_LOAD <- 1
  20. [root@mail workspace]#

复制代码

应该合乎要求吧,跟行号无关 [/code]

论坛徽章:
0
14 [报告]
发表于 2005-01-07 12:57 |只看该作者

请教 文本文件转换的问题

运行了,根本不是你下面显示的那个~~~

论坛徽章:
0
15 [报告]
发表于 2005-01-07 13:39 |只看该作者

请教 文本文件转换的问题

$^I learning perl里面有这个符号的说明

@ARGV = glob "cpuinfo" or die "no file found";
如果你的文件叫a.txt,并且在c:\目录下那么改为

@ARGV = glob "c:\a.txt" or die "no file found";   you kown?

论坛徽章:
0
16 [报告]
发表于 2005-01-07 14:23 |只看该作者

请教 文本文件转换的问题

您能说说思路么,我也学习学习
my $n=-3; 为什么是-3呀??表示后数第4行??
能说说么??
我现在手中没有教材呀。$^I什么意思,您就说说吧!!
总是说while (<> { 这一行有问题,怎么回事呢

论坛徽章:
0
17 [报告]
发表于 2005-01-07 14:57 |只看该作者

请教 文本文件转换的问题

字母和@letter数组下标对应,你的文件前面都有三行是不包含首起字母的所以要-3

你看看是不是你拷贝的时候出现异常字符了,程序没有问题,我在linux下测试正常

$^I类似的符号Perl里面有非常多,还是找书来看吧

论坛徽章:
0
18 [报告]
发表于 2005-01-07 15:15 |只看该作者

请教 文本文件转换的问题

我明白您的意思了。但是cpu的命令有很多,这个只是一个例子,按您的程序的话,如果第前2行出现变化的话,就不能应用了。就是说a-z不一定出现在第2行的,我的意思是无论什么命令,只要读到那个语句,就把下行的内容加上,并把以下的行标改正。您能帮我看看我这个思路对么??
#!c:/perl/bin/perl
use strict;
my $idx = 0;
@ARGV = glob "C:\in.txt" or die "no file found";
while (<>{
  if(/^        ([a-z]): *(.*)/)
   {
     if(/MDR_LOAD <- 1, MDR_INST <- 0/)
    {
     $a=substr($idx,0,1);
     $idx+=1;
     $new=substr($idx,2);
     $stage=",";
     $idx.=$stage;
     $idx.=$new;
     $idx.=$stage;
     $cg="MDR_HAZARD <- 1"
     $idx.=$cg;

     $b=substr($idx,0,1);
     $b=chr(ord($b+1));
     $co=substr($idx+1,1);

     $idx+1=$b.$co;
     $idx++;
    }
     }
print;
$idx++;
}

论坛徽章:
0
19 [报告]
发表于 2005-01-07 15:23 |只看该作者

请教 文本文件转换的问题

你改改就行了,简单的方法有--程序后面加参数,告诉程序a-z的行从第几行开始,然后变更相应的-3值

如果a-z行是连续的话就没有问题

论坛徽章:
0
20 [报告]
发表于 2005-01-07 15:34 |只看该作者

请教 文本文件转换的问题

-3??不能确定a段会出现在第3行的
您能帮我看看我上面的对么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP