VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 4140|回复: 2

[讨论] 很简单的问题你不一定搞定:常量字符串输入任一特殊字符

[复制链接]
发表于 2016-1-6 19:18:37 | 显示全部楼层 |阅读模式
很简单的问题你不一定搞定:常量字符串输入任一特殊字符

在C中字符串常量, 很容易通过转义符'\', 在字符串中插入特殊数据,如下:
  1. wchar_t* const CN_EN_NUM = "\xA\0Zero\0\x8\0Ten\0\xE\0Twenty\0\xE\0Thirty\0\xC\0Forty\0\xC\0Fifty\0\xC\0Sixty\0\x10\0Seventy\0\xE\0Eighty\0\xE\0Ninety";
复制代码
这样的好处在于编译的时候完成数据格式的转换

而VB中几乎没有人知用何方法:在常量字符串输入任一特殊字符。


当然如果是变量
则可以这样, 当然这性能只能呵呵了。
dim EnNum as string
EnNum = Chr$(41) & Chr$(0) &"Zero" & Chr$(0) & Chr$(8) & .....

而常量却不可, 因为chr是个函数。
const EN_NUM = Chr$(41) & Chr$(0) &"Zero" & Chr$(0) & Chr$(8) & .....

那有没有办法呢?常量字符串输入任一特殊字符。
 楼主| 发表于 2016-1-6 19:28:29 | 显示全部楼层
这个事情是源于之前编写公历转换农历函数时,农历数据都是二进制,如下
(题外话,后来用C重写了,也重新编码)
  1. '农历常量(1899~2100,共202年)
  2. Private Const ylData = "AB500D2,4BD0883," _
  3.          & "4AE00DB,A5700D0,54D0581,D2600D8,D9500CC,655147D,56A00D5,9AD00CA,55D027A,4AE00D2," _
  4.          & "A5B0682,A4D00DA,D2500CE,D25157E,B5500D6,56A00CC,ADA027B,95B00D3,49717C9,49B00DC," _
  5.          & "A4B00D0,B4B0580,6A500D8,6D400CD,AB5147C,2B600D5,95700CA,52F027B,49700D2,6560682," _
  6.          & "D4A00D9,EA500CE,6A9157E,5AD00D6,2B600CC,86E137C,92E00D3,C8D1783,C9500DB,D4A00D0," _
  7.          & "D8A167F,B5500D7,56A00CD,A5B147D,25D00D5,92D00CA,D2B027A,A9500D2,B550781,6CA00D9," _
  8.          & "B5500CE,535157F,4DA00D6,A5B00CB,457037C,52B00D4,A9A0883,E9500DA,6AA00D0,AEA0680," _
  9.          & "AB500D7,4B600CD,AAE047D,A5700D5,52600CA,F260379,D9500D1,5B50782,56A00D9,96D00CE," _
  10.          & "4DD057F,4AD00D7,A4D00CB,D4D047B,D2500D3,D550883,B5400DA,B6A00CF,95A1680,95B00D8," _
  11.          & "49B00CD,A97047D,A4B00D5,B270ACA,6A500DC,6D400D1,AF40681,AB600D9,93700CE,4AF057F," _
  12.          & "49700D7,64B00CC,74A037B,EA500D2,6B50883,5AC00DB,AB600CF,96D0580,92E00D8,C9600CD," _
  13.          & "D95047C,D4A00D4,DA500C9,755027A,56A00D1,ABB0781,25D00DA,92D00CF,CAB057E,A9500D6," _
  14.          & "B4A00CB,BAA047B,B5500D2,55D0983,4BA00DB,A5B00D0,5171680,52B00D8,A9300CD,795047D," _
  15.          & "6AA00D4,AD500C9,5B5027A,4B600D2,96E0681,A4E00D9,D2600CE,EA6057E,D5300D5,5AA00CB," _
  16.          & "76A037B,96D00D3,4AB0B83,4AD00DB,A4D00D0,D0B1680,D2500D7,D5200CC,DD4057C,B5A00D4," _
  17.          & "56D00C9,55B027A,49B00D2,A570782,A4B00D9,AA500CE,B25157E,6D200D6,ADA00CA,4B6137B," _
  18.          & "93700D3,49F08C9,49700DB,64B00D0,68A1680,EA500D7,6AA00CC,A6C147C,AAE00D4,92E00CA," _
  19.          & "D2E0379,C9600D1,D550781,D4A00D9,DA400CD,5D5057E,56A00D6,A6C00CB,55D047B,52D00D3," _
  20.          & "A9B0883,A9500DB,B4A00CF,B6A067F,AD500D7,55A00CD,ABA047C,A5A00D4,52B00CA,B27037A," _
  21.          & "69300D1,7330781,6AA00D9,AD500CE,4B5157E,4B600D6,A5700CB,54E047C,D1600D2,E960882," _
  22.          & "D5200DA,DAA00CF,6AA167F,56D00D7,4AE00CD,A9D047D,A2D00D4,D1500C9,F250279,D5200D1"
复制代码
由于全是字符串,VB必须将其转换为数值,然后再读取。这不是绕了一圈。那是不可以直接将二进制的数据转换为字符串存储,可惜的是代码中的字符串不能输入特殊字符(显示为?号或空了,如chr(0))
回复 支持 反对

使用道具 举报

发表于 2016-1-8 11:55:53 | 显示全部楼层
本帖最后由 kx25 于 2016-1-8 12:00 编辑

插入Chr$(0)是为了分割吗?
我喜欢用下面的代码:
  1. Option Explicit

  2. Public vStrArrA(23) As String   ' 全局变量
  3. Public vStrArrB(6) As String    ' 全局变量
  4. Private vLngArr(99) As Long     ' 局部变量

  5. Public Sub SetDataA()
  6.     '该过程在程序启动时,要运行一次。
  7.     vStrArrA(0) = "立春"
  8.     vStrArrA(1) = "雨水"
  9.     vStrArrA(2) = "惊蛰"
  10.     vStrArrA(3) = "春分"
  11.     '。。。
  12.     '
  13.     vStrArrB(0) = "星期日"
  14.     vStrArrB(1) = "星期一"
  15.     vStrArrB(2) = "星期二"
  16.     '。。。
  17. End Sub

  18. Private Sub SetDataB()
  19.     '调用vLngArr时,要运行一次。
  20.     vLngArr(0) = 3464
  21.     vLngArr(1) = 6586
  22.     vLngArr(2) = 3523
  23.     '。。。
  24. End Sub
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-2 21:57

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表