VFP仿.NET String.Format 方法

将指定字符串中的每个{x}替换为相应值,并返回文本

*-- 调用格式 StringFormat("日期{2},字符{1}","TAB",{^2013-01-01})
Function StringFormat
Parameters cText,Parameter1,Parameter2,Parameter3,Parameter4,Parameter5,Parameter6,Parameter7,Parameter8,Parameter9,Parameter10

Local _tokens As Collection,cEndText As String,nCount As Integer,cName As String,oTokenParser As Object
Local oPara As Collection
cEndText=""
If Vartype(cText) <>"C"
 Return .T.
Endif
*--创建集合
oPara=Createobject("Collection")
For nCount=1 To 10
 cName ="Parameter"+Alltrim(Str(nCount))
 oPara.Add(&cName)
Endfor

oTokenParser =Createobject("TokenParser")
oTokenParser .ParseTemplate(cText)
nCount=1
For Each token In oTokenParser ._tokens
 If Like("{*}",token)
*--判断{}是否符合要求
  cTmp=Substr(token,2,Len(token)-2)
  If Isdigit(cTmp)  And Val(cTmp)<=10
   cVal=oPara.Item(Val(cTmp))
   Do Case
   Case Vartype(cVal)=="C"
    cEndText = cEndText  +cVal
   Case Vartype(cVal)=="L"
    cEndText = cEndText +Iif(cVal==.T.,".T.",".F.")
   Case Vartype(cVal )=="N"
    cEndText = cEndText +Alltrim(Str(cVal))
   Case Vartype(cVal)=="D"
    cEndText = cEndText +"{^" +Dtoc(cVal)+"}"
   Case Vartype(cVal)=="T"
    cEndText = cEndText +"{^" +Ttoc(cVal)+"}"
   Endcase
   nCount = nCount + 1
  Endif
 Else
  cEndText = cEndText + token
 Endif
Endfor
Return cEndText
Endfunc

#Define LABEL_OPEN_CHAR = '{'
#Define LABEL_CLOSE_CHAR = '}'
Define Class  TokenParser As Custom
 _tokens=.F.
 _temp=""
 _currentMode=.F.
 _lastMode=.F.
 Procedure Init
 Local tty As Collection
 tty=Createobject("collection")
 This._tokens=tty
 Endproc

Procedure EnterMode
 Lparameters mode
*-- 当状态改变的时候应当保存之前已处理的寄存器中的内容
 If Len(This._temp) > 0
  This._tokens.Add(This._temp)
  This._temp=""
 Endif
 This._lastMode =This._currentMode
 This._currentMode = mode
 Endproc

Procedure LeaveMode
 If Len(This._temp)> 0
  This._tokens.Add(This._temp)
  This._temp=""
 Endif
*--因为只有两个状态,因此
 This._currentMode = This._lastMode
 Endproc
 Procedure ParseTemplate
 Lparameters template
 For i=1 To Len(template)
  c=Substr(template,i,1)
  Do Case
  Case c=LABEL_OPEN_CHAR
   This.EnterMode(1)
&&将当前字符压入寄存器,同样的代码在三个分支都出现了
&& 请留意这行代码出现的时机
&&在不同的状态下可能出现不同的处理过程
   This._temp = This._temp + c
  Case c=LABEL_CLOSE_CHAR
&& 将当前字符压入寄存器
   This._temp = This._temp + c
&& 因为本例只有两个状态,因此这里相当于:_EnterMode(ParserMode.LeaveLabel)
&& 但是为了区别一下,我还是定义了两个方法来实现
   This.LeaveMode()
  Otherwise
   This._temp = This._temp + c
  Endcase
 Endfor
 Endproc
Enddefine

VFP自定义函数StringFormat (仿.NET String.Format 方法)的更多相关文章

  1. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  2. 避免string.Format方法的装箱

    我们知道,使用string.Format方法可能会存在装箱的情况.比如如下: static void Main(string[] args) { string s = string.Format(&q ...

  3. 通过Oracle函数SQL实现C# String.Format字符串格式化功能

    语言国际化要求,开发上要求Oracle数据库SQL中对应的返回信息-Message,实现一个通用函数调用,比如:提示信息内容:条码123456当前工站在FCT!”,即通用的信息内容格式化标准为:“条码 ...

  4. JAVA String.format 方法使用介绍

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  5. JAVA String.format 方法使用介绍<转>

    在JDK1.5中,String类增加了一个非常有用的静态函数format(String  format, Objece...  argues),可以将各类数据格式化为字符串并输出.其中format参数 ...

  6. Javascript中的String.format方法实现

    <script type='text/javascript'> String.format = function() { var s = arguments[0]; for (var i ...

  7. Java String.Format() 方法及参数说明

    转自:https://blueram.iteye.com/blog/441683 JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l ...

  8. 如何在string.Format()方法中输出大括号

    在string.Format参数中,大括号{}是有特殊意义的符号,但是如果我们希望最终的结果中包含大括号({}),那么我们需要怎么做呢?是”\{”吗?很遗憾,运行时,会给你一个Exception的!正 ...

  9. Java中利用MessageFormat对象实现类似C# string.Format方法格式化

    我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...

随机推荐

  1. 项目中Zookeeper配置参数笔记

    ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxo ...

  2. Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...

  3. 百度地图API地理位置和坐标转换

    1.由地名(省份.城市.街道等)得到其对应的百度地图坐标: http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&a ...

  4. Nexus3.0.0+Maven的使用(三)

    这章主要讲怎么和Maven做集成,集成的方式主要分以下种情况:代理中央仓库.Snapshot包的管理.Release包的管理.第三方Jar上传到Nexus上 1  代理中央仓库 只要在PMO文件中配置 ...

  5. TensorFlow中权重的随机初始化

    一开始没看懂stddev是什么参数,找了一下,在tensorflow/python/ops里有random_ops,其中是这么写的: def random_normal(shape, mean=0.0 ...

  6. c#Ice开发之环境配置(一)

    第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.5.1: http://www.zeroc.com/download/ 安装完成可以在vs-工具的最下面看 ...

  7. 安装完CentOS 7 后必做的七件事

    CentOS是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7.当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后,首要的工作肯定是加强它的安全性,以下列出的七件事 ...

  8. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  9. 修改Oracle字符集为 ZHS16GBK

    SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 10 13:12:48 2016 Copyright (c) 1982, 2009, Oracle ...

  10. ubuntu graphic cannot display

    1.ubuntu resuce mode 2.mount -o,remount,rw /dev/sda6 / 3.dhclient eth0 4.apt-get update apt-get inst ...