$fscanf $sscanf $fgets $readmemh 等系统函数使用

<1.txt> 内容 

111 222 333
444 555 666

<2.txt> 内容

a: 111 222
b: 333 444

 

 

 

program test;
string txt1,txt2;
int fh_1,fh_2;
string line_s;
int val1,val2,val3;
int val_q[$];

initial begin
    txt1 = "1.txt";
    fh_1 = $fopen(txt1,"r");
    txt2 = "2.txt";
    fh_2 = $fopen(txt2,"r");
end

##使用$fscanf(file_handle,format,args);

initial begin
    while(!$feof(fh_1)) begin
        $fscanf(fh_1,"%h",val1); #fscanf(fh_1,"%h %h %h",val1,val2,val3); 这种写法一次取三个数
        $display("val1:%0h",val1);
    end
end
##result:
          val1:111
          val1:222
          val1:333
          val1:444
          val1:555
          val1:666
          val1:666 //注意!!! 这个时候最后一个数据会重复输出一遍

##使用$sscanf(string,format,args);

initial begin
    while(!$feof(fh_2)) begin
        $fgets(line_s,fh_2); #获得一行内容,保存string格式
        if(line_s == "") break; #空行跳过
        $sscanf(line_s,"%h: %h %h",val1,val2,val3);
        $display("%0h,%0h,%0h",val1,val2,val3);
    end
end
##result:
          a,111,222
          b,333,444 

##使用$readmemh(filename,mem_name,start_addr,finish_addr);

initial begin
    $readmemh(txt1,val_q); ##或者 int val_q[1:20]; $readmemh(txt1,val_q,10,15);
    foreach(val_q[i]) begin
        $display("val_q[%0d]:%0h",i,val_q[i]);
    end
end
##result:
    val_q[0]:111
    val_q[1]:222
    val_q[2]:333
    val_q[3]:444
    val_q[4]:555
    val_q[5]:666

endprogram

 

参考:【1】https://blog.csdn.net/weixin_43249032/article/details/88896496

           【2】IEEE Standard for SystemVerilog

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲仔小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值