format.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:10k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: format.n,v 1.7.2.1 2004/10/27 12:52:40 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH format n 8.1 Tcl "Tcl Built-In Commands"
  12. .BS
  13. '" Note:  do not modify the .SH NAME line immediately below!
  14. .SH NAME
  15. format - Format a string in the style of sprintf
  16. .SH SYNOPSIS
  17. fBformat fIformatString fR?fIarg arg ...fR?
  18. .BE
  19. .SH INTRODUCTION
  20. .PP
  21. This command generates a formatted string in the same way as the
  22. ANSI C fBsprintffR procedure (it uses fBsprintffR in its
  23. implementation).
  24. fIFormatStringfR indicates how to format the result, using
  25. fB%fR conversion specifiers as in fBsprintffR, and the additional
  26. arguments, if any, provide values to be substituted into the result.
  27. The return value from fBformatfR is the formatted string.
  28. .SH "DETAILS ON FORMATTING"
  29. .PP
  30. The command operates by scanning fIformatStringfR from left to right. 
  31. Each character from the format string is appended to the result
  32. string unless it is a percent sign.
  33. If the character is a fB%fR then it is not copied to the result string.
  34. Instead, the characters following the fB%fR character are treated as
  35. a conversion specifier.
  36. The conversion specifier controls the conversion of the next successive
  37. fIargfR to a particular format and the result is appended to 
  38. the result string in place of the conversion specifier.
  39. If there are multiple conversion specifiers in the format string,
  40. then each one controls the conversion of one additional fIargfR.
  41. The fBformatfR command must be given enough fIargfRs to meet the needs
  42. of all of the conversion specifiers in fIformatStringfR.
  43. .PP
  44. Each conversion specifier may contain up to six different parts:
  45. an XPG3 position specifier,
  46. a set of flags, a minimum field width, a precision, a length modifier,
  47. and a conversion character.
  48. Any of these fields may be omitted except for the conversion character.
  49. The fields that are present must appear in the order given above.
  50. The paragraphs below discuss each of these fields in turn.
  51. .PP
  52. If the fB%fR is followed by a decimal number and a fB$fR, as in
  53. ``fB%2$dfR'', then the value to convert is not taken from the
  54. next sequential argument.
  55. Instead, it is taken from the argument indicated by the number,
  56. where 1 corresponds to the first fIargfR.
  57. If the conversion specifier requires multiple arguments because
  58. of fB*fR characters in the specifier then
  59. successive arguments are used, starting with the argument
  60. given by the number.
  61. This follows the XPG3 conventions for positional specifiers.
  62. If there are any positional specifiers in fIformatStringfR
  63. then all of the specifiers must be positional.
  64. .PP
  65. The second portion of a conversion specifier may contain any of the
  66. following flag characters, in any order:
  67. .TP 10
  68. fB-fR
  69. Specifies that the converted argument should be left-justified 
  70. in its field (numbers are normally right-justified with leading 
  71. spaces if needed).
  72. .TP 10
  73. fB+fR
  74. Specifies that a number should always be printed with a sign, 
  75. even if positive.
  76. .TP 10
  77. fIspacefR
  78. Specifies that a space should be added to the beginning of the 
  79. number if the first character isn't a sign.
  80. .TP 10
  81. fB0fR
  82. Specifies that the number should be padded on the left with 
  83. zeroes instead of spaces.
  84. .TP 10
  85. fB#fR
  86. Requests an alternate output form. For fBofR and fBOfR
  87. conversions it guarantees that the first digit is always fB0fR.
  88. For fBxfR or fBXfR conversions, fB0xfR or fB0XfR (respectively)
  89. will be added to the beginning of the result unless it is zero.
  90. For all floating-point conversions (fBefR, fBEfR, fBffR,
  91. fBgfR, and fBGfR) it guarantees that the result always 
  92. has a decimal point.
  93. For fBgfR and fBGfR conversions it specifies that 
  94. trailing zeroes should not be removed.
  95. .PP
  96. The third portion of a conversion specifier is a number giving a
  97. minimum field width for this conversion.
  98. It is typically used to make columns line up in tabular printouts.
  99. If the converted argument contains fewer characters than the
  100. minimum field width then it will be padded so that it is as wide
  101. as the minimum field width.
  102. Padding normally occurs by adding extra spaces on the left of the
  103. converted argument, but the fB0fR and fB-fR flags 
  104. may be used to specify padding with zeroes on the left or with
  105. spaces on the right, respectively.
  106. If the minimum field width is specified as fB*fR rather than
  107. a number, then the next argument to the fBformatfR command
  108. determines the minimum field width; it must be a numeric string.
  109. .PP
  110. The fourth portion of a conversion specifier is a precision,
  111. which consists of a period followed by a number.
  112. The number is used in different ways for different conversions.
  113. For fBefR, fBEfR, and fBffR conversions it specifies the number
  114. of digits to appear to the right of the decimal point.
  115. For fBgfR and fBGfR conversions it specifies the total number
  116. of digits to appear, including those on both sides of the decimal
  117. point (however, trailing zeroes after the decimal point will still
  118. be omitted unless the fB#fR flag has been specified).
  119. For integer conversions, it specifies a minimum number of digits
  120. to print (leading zeroes will be added if necessary).
  121. For fBsfR conversions it specifies the maximum number of characters to be 
  122. printed; if the string is longer than this then the trailing characters will be dropped.
  123. If the precision is specified with fB*fR rather than a number
  124. then the next argument to the fBformatfR command determines the precision;
  125. it must be a numeric string.
  126. .PP
  127. The fifth part of a conversion specifier is a length modifier,
  128. which must be fBhfR or fBlfR.
  129. If it is fBhfR it specifies that the numeric value should be
  130. truncated to a 16-bit value before converting.
  131. This option is rarely useful.
  132. .VS 8.4
  133. If it is fBlfR it specifies that the numeric value should be (at
  134. least) a 64-bit value.  If neither fBhfR nor fBlfR are present,
  135. numeric values are interpreted as being values of the width of the
  136. native machine word, as described by fBtcl_platform(wordSize)fR.
  137. .VE
  138. .PP
  139. The last thing in a conversion specifier is an alphabetic character
  140. that determines what kind of conversion to perform.
  141. The following conversion characters are currently supported:
  142. .TP 10
  143. fBdfR
  144. Convert integer to signed decimal string.
  145. .TP 10
  146. fBufR
  147. Convert integer to unsigned decimal string.
  148. .TP 10
  149. fBifR
  150. Convert integer to signed decimal string;  the integer may either be
  151. in decimal, in octal (with a leading fB0fR) or in hexadecimal
  152. (with a leading fB0xfR).
  153. .TP 10
  154. fBofR
  155. Convert integer to unsigned octal string.
  156. .TP 10
  157. fBxfR or fBXfR
  158. Convert integer to unsigned hexadecimal string, using digits
  159. ``0123456789abcdef'' for fBxfR and ``0123456789ABCDEF'' for fBXfR).
  160. .VS
  161. .TP 10
  162. fBcfR
  163. Convert integer to the Unicode character it represents.
  164. .VE
  165. .TP 10
  166. fBsfR
  167. No conversion; just insert string.
  168. .TP 10
  169. fBffR
  170. Convert floating-point number to signed decimal string of 
  171. the form fIxx.yyyfR, where the number of fIyfR's is determined by 
  172. the precision (default: 6).
  173. If the precision is 0 then no decimal point is output.
  174. .TP 10
  175. fBefR or fBefR
  176. Convert floating-point number to scientific notation in the 
  177. form fIx.yyyfBe(+-fIzzfR, where the number of fIyfR's is determined 
  178. by the precision (default: 6).
  179. If the precision is 0 then no decimal point is output.
  180. If the fBEfR form is used then fBEfR is 
  181. printed instead of fBefR.
  182. .TP 10
  183. fBgfR or fBGfR
  184. If the exponent is less than -4 or greater than or equal to the 
  185. precision, then convert floating-point number as for fB%efR or 
  186. fB%EfR.
  187. Otherwise convert as for fB%ffR.
  188. Trailing zeroes and a trailing decimal point are omitted.
  189. .TP 10
  190. fB%fR
  191. No conversion: just insert fB%fR.
  192. .LP
  193. For the numerical conversions the argument being converted must
  194. be an integer or floating-point string; format converts the argument
  195. to binary and then converts it back to a string according to 
  196. the conversion specifier.
  197. .SH "DIFFERENCES FROM ANSI SPRINTF"
  198. .PP
  199. The behavior of the format command is the same as the
  200. ANSI C fBsprintffR procedure except for the following
  201. differences:
  202. .IP [1]
  203. fB%pfR and fB%nfR specifiers are not currently supported.
  204. .IP [2]
  205. For fB%cfR conversions the argument must be a decimal string,
  206. which will then be converted to the corresponding character value.
  207. .IP [3]
  208. The fBlfR modifier
  209. .VS 8.4
  210. is ignored for real values and on 64-bit platforms, which are always
  211. converted as if the fBlfR modifier were present (i.e. the types
  212. fBdoublefR and fBlongfR are used for the internal representation
  213. of real and integer values, respectively).
  214. .VE 8.4
  215. If the fBhfR modifier is specified then integer values are truncated
  216. to fBshortfR before conversion.  Both fBhfR and fBlfR modifiers
  217. are ignored on all other conversions.
  218. .SH EXAMPLES
  219. Convert the output of fBtimefR into seconds to an accuracy of
  220. hundredths of a second:
  221. .CS
  222. set us [lindex [time $someTclCode] 0]
  223. puts [fBformatfR "%.2f seconds to execute" [expr {$us / 1e6}]]
  224. .CE
  225. .PP
  226. Create a packed X11 literal color specification:
  227. .CS
  228. # Each color-component should be in range (0..255)
  229. set color [fBformatfR "#%02x%02x%02x" $r $g $b]
  230. .CE
  231. .PP
  232. Use XPG3 format codes to allow reordering of fields (a technique that
  233. is often used in localized message catalogs; see fBmsgcatfR) without
  234. reordering the data values passed to fBformatfR:
  235. .CS
  236. set fmt1 "Today, %d shares in %s were bought at $%.2f each"
  237. puts [fBformatfR $fmt1 123 "Global BigCorp" 19.37]
  238. set fmt2 "Bought %2\$s equity ($%3$.2f x %1\$d) today"
  239. puts [fBformatfR $fmt2 123 "Global BigCorp" 19.37]
  240. .CE
  241. .PP
  242. Print a small table of powers of three:
  243. .CS
  244. # Set up the column widths
  245. set w1 5
  246. set w2 10
  247. # Make a nice header (with separator) for the table first
  248. set sep +-[string repeat - $w1]-+-[string repeat - $w2]-+
  249. puts $sep
  250. puts [fBformatfR "| %-*s | %-*s |" $w1 "Index" $w2 "Power"]
  251. puts $sep
  252. # Print the contents of the table
  253. set p 1
  254. for {set i 0} {$i<=20} {incr i} {
  255.    puts [fBformatfR "| %*d | %*ld |" $w1 $i $w2 $p]
  256.    set p [expr {wide($p) * 3}]
  257. }
  258. # Finish off by printing the separator again
  259. puts $sep
  260. .CE
  261. .SH "SEE ALSO"
  262. scan(n), sprintf(3), string(n)
  263. .SH KEYWORDS
  264. conversion specifier, format, sprintf, string, substitution