Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1736384
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: Python/Ruby

2012-03-26 11:34:15

使用write函数可以打印出一个定义的格式:


  1. ###### 使用write #########
  2. $~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
  3. write; #缺省文件变量的打印,即不带任何参数的write,打印$~所指定的格式

  4. format MYFORMAT = # 定义格式MYFORMAT
  5. =================================
  6.       Text #此处注释被打印
  7. =================================
  8. .
  9. # 以点号表示格式化结束,必须是单独的点号换行。

  10. write; # write可以在MYFORMAT定义前后都可以调用

输出(标准输出,即终端):

  1. =================================
  2. Text #此处注释被打印
  3. =================================
  4. =================================
  5. Text #此处注释被打印
  6. =================================


如果不指定$~的情况:

  1. ###### 不指定$~下会打印名为STDOUT的格式 ######
  2. write; #不指定$~的情况下会寻找名为STDOUT的格式

  3. format STDOUT =
  4. ~~号指定的文字不会被打印
  5. ----------------
  6.   STDOUT格式
  7. ----------------
  8. .


使用文件变量,会打印与文件变量名相同名字的格式:

  1. ###### 使用文件变量的write #######
  2. if (open(MYFILE, ">tmp")) {
  3. $~ = "MYFORMAT";
  4. write MYFILE; # 含文件变量的打印,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。

  5. format MYFILE = # 与文件变量同名
  6. =================================
  7.       输入到文件中
  8. =================================
  9. .
  10. close MYFILE;
  11. }


利用select来使用$~中定义的格式:
  1. ###### 使用select的write #######
  2. if (open(MYFILE, ">>tmp")) {
  3. select (MYFILE); # 使得缺省文件变量的打印输出到MYFILE中
  4. $~ = "OTHER";
  5. write; # 缺省文件变量,打印到select指定的文件中,必使用$~指定的格式OTHER

  6. format OTHER =
  7. =================================
  8.   使用定义的格式输入到文件中
  9. =================================
  10. .
  11. close MYFILE;
  12. }


输出变量的值:
  1. # 在write中写入变量
  2. $var = 235;
  3. format VAR =
  4. The number is @<<<<<<!
  5. $var
  6. .

  7. $var = 532;
  8. $~ = "VAR";
  9. write; # 根据当前的变量值代替@<<<<<<并进行输出:The number is 532 ! (<为占位符,并且表示左对齐输出)
  10. $var = 836;


除了@<<<,还有其它的值域格式:
  1. # @>>>表示右对齐输出
  2. format RIGHT =
  3. The number is @>>>>>>!
  4. $var
  5. .
  6. $~ = "RIGHT";
  7. write; # The number is

  8. # @|||表示居中输出
  9. format CENTER =
  10. The number is @||||||!
  11. $var
  12. .
  13. $~ = "CENTER";
  14. write; # The number is 836 !

  15. # @##.##表示固定精度
  16. format FIX =
  17. The number is @####.###!
  18. $var
  19. .
  20. $~ = "FIX";
  21. write; # The number is 836.

  22. # @*表示多行文本
  23. $text = "line 1\nline 2";
  24. format MULTILINE =
  25. The text is @*
  26. $text
  27. .
  28. $~ = "MULTILINE";
  29. write; # The text is line 1 (换行)line 2


可以输出不只一个变量:

  1. # 输出多个变量
  2. $a = 5;
  3. $b = 10;
  4. format VARS =
  5. @<<< + @<<< = @<<<.
  6. $a, $b, $a+$b
  7. .
  8. $~ = "VARS";
  9. write; # 5 + 10 = 15 .


在输出到打印机,会需要以页的方式输出:
  1. #准备页的内容
  2. for ($i = 1; $i <= 100; $i++) {
  3.     $content .= "line $i\n";
  4. }
  5. format CONTENT =
  6. @*
  7. $content
  8. .
  9. $~ = "CONTENT";

  10. #页眉
  11. format STDOUT_TOP =
  12. This is page top
  13. .

  14. #write;

  15. # S%表示当前页,可以清零
  16. $% = 0;

  17. # $^设置页眉格式,默认是STDOUT_TOP
  18. $^ = "MYTOP";
  19. format MYTOP =
  20. This is page @<
  21. $%
  22. .

  23. $= = 20; # 设置页长,默认情况下是60

  24. write;

  25. # $-表示当前行离页尾的行数。当$-值为0时,开始新的一页。write会自动减掉该值。
  26. print $-."\n";

  27. @*会将字符串变量全部输出,可以用^<<<来格式化长串输出:

  28. #### 格式化长字符串 ####
  29. $text = "abcdefghijklmnopqrstuvwxyz";

  30. format LONG =
  31. ^<<<<
  32. $text; # 输完一行后,输出的字符会出变量中删除掉
  33. ^<<<<<<<<<<<<<
  34. $text;
  35. ^>>>>>>>>>>>>>>>>>>>>>>
  36. $text;
  37. ^<<<<<<<
  38. $text; # $text已经没有内容,输出空行
  39. ~^<<<<<
  40. $text; # 最前面的~号避免输出空行
  41. .

  42. $~ = "LONG";
  43. write;


最后一种格式化的方式是使用printf,有以下选项:
域值   含义
%c 单个字符
%d 十进制整数
%e 科学计数法形式的浮点数  
%f 普通形式(定点)浮点数
%g 紧缩形式浮点数
%o 八进制整数
%s 字符串
%u 无符号整数
%x 十六进制整数



阅读(3342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~