免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2030 | 回复: 8
打印 上一主题 下一主题

一段文本文件的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-09 14:53 |只看该作者 |倒序浏览
处理一段文本文件
R2 <- R1 + (R3)
        opcode op_add_21_3
        comment proc_opcode := "01100010";        -- R2 <- R1+(R3)
        a: MDR <- mem[PC], PC <- PC + 1
        b: MAR_SRC <- R3, MAR_LOAD <- 1, ADDR_SEL <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
        c: MDR_SRC <- MEM, MDR_LOAD <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
        d: ALUs1_SRC <- R1, ALUs2_SRC <- MDR, ALU_FUNC <- alu_add, ALUOUT_DEST <- R2, ALUOUT_LOAD <- 1
        e: WB_DEST <- R2, REG_LOAD <- 1

参考一位朋友的程序,还是不变化的输出,毛病出在哪里呢??


#!c:/perl/bin/perl
@ARGV = glob "C:\in.txt" or die "no file found";

while (<>{
if(/^([a-z]): *(.*)/ ){

   if(/MDR_LOAD <- 1, MDR_INST <- 0/)
  {
      @line = split(/:/, $_);
       $n=ord($line[0]);
     print "$line[0]line[1]";
      next;
   }
  $need = $_;
   @line2 = split(/:/,$need);
if(ord($line2[0]) >; $n)
     {     
        if(ord($line2[0]) == $n+1)
       {
       print ",$line2[1],MDR_HAZARD <- 1";
       next;
         }else{
        $b = chr(ord($line2[0])-1);
        print "$bline2[1]";
             next;
         }
      }
}
print;
}

论坛徽章:
0
2 [报告]
发表于 2005-01-09 21:37 |只看该作者

一段文本文件的处理

终于知道原因了,
R2 <- R1 + (R4)
opcode op_add_21_4
comment proc_opcode := "01100110"; -- R2 <- R1+(R4)
     a: MDR <- mem[PC], PC <- PC + 1
     b: MAR_SRC <- R4, MAR_LOAD <- 1, ADDR_SEL <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
     c: MDR_SRC <- MEM, MDR_LOAD <- 1, MDR_INST <- 0, PC_INC <- 0, R2_PENDING <- 1
     d: ALUs1_SRC <- R1, ALUs2_SRC <- MDR, ALU_FUNC <- alu_add, ALUOUT_DEST <- R2, ALUOUT_LOAD <- 1
     e: WB      _DEST <- R2, REG_LOAD <- 1


a,b c d 段的命令前面是有空格的,我给大家发出去后就没有了,因为有空格,所以检测不到a到z就输出了。空格消除后就可以了,但是在有空格的时候,程序中怎样消除呢,请大家帮忙~~~

论坛徽章:
0
3 [报告]
发表于 2005-01-10 09:54 |只看该作者

一段文本文件的处理

在你上个帖子我给你回复了

如果加上空格那么正则表达式作相应更改就可以了

论坛徽章:
0
4 [报告]
发表于 2005-01-10 12:23 |只看该作者

一段文本文件的处理

谢谢您,就是说if(/^     ([a-z]): *(.*)/ )打头的部分是空格就可以判定了吧~
但是后面的 $n=ord($line[0]);ord($line2[0]) >; $n怎么改变呢!

论坛徽章:
0
5 [报告]
发表于 2005-01-10 14:50 |只看该作者

一段文本文件的处理

[quote]原帖由 "yilong777jp"] $n怎么改变呢![/quote 发表:


我记得这几天的贴子里面有一个讨论如何去掉一行开头的空行的,你找找看

不然你处理一下$line[0]也可以,用substr之类的

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

一段文本文件的处理

真的谢谢 superdoctor的耐心指导!!
我找到了  s/^.//s; 这个是去掉第一个字符,变成空格,看来只有用substr了。
其实,我另一个帖子提到的2个程序的合并,只是很简单的读取关系,就是以前的那个文本文件程序的处理结果,作为下一个程序的读取源,您有什么好办法么?

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

一段文本文件的处理

你的那个帖子我也回复过

论坛徽章:
0
8 [报告]
发表于 2005-01-13 11:44 |只看该作者

一段文本文件的处理

superdoctor 你也回回我的呀,还没人帮我

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

一段文本文件的处理

楼上的,我给你回了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP