Office中国论坛/Access中国论坛

标题: #字库串的系列问题?# [打印本页]

作者: eio    时间: 2003-1-28 18:43
标题: #字库串的系列问题?#

请教各位大侠,关于字库串的系列问题如下:(请大家原谅我的疑问!)
(1):长度问题,有一个文本框,如何用MSGBOX判断其含有的文本长度,例如上面是A1234,那么长度是“5”,如果是1234,长度是“4”?

(2):相加的问题
  2.1:有“0005601”的号码,需要加“1”转换为0005602,怎样办?
  2.2:有“AK14525”的号码,需要加“1”转换为“AK14526”,怎样板?要求是AK14525的长度和模式有时可能不同,例如值是AA22002等。
  
(3):相减的问题:
  3.1:有“0005601”的号码,需要减“1”转换为0005599,怎样办?
  3.2:有“0005601”的号码,需要减“0002330”转换为“0002231”,怎样办?当然可能数位有点不同,就是如何舍掉这个“0”!
  3.3:有“0005601”要减1为000560!
  3.4:有AK471要减1,为AK47
  
(4):特征号码问题:
  4.1:有AN555,AN5551,AN55551等号码,要求将左边的AN去掉,怎么办?
  4.2:有2225+555+3+21+5+35,怎样提取系列的数字?(加号的数量等是未知的,如果含有*/-等呢?)[em27]
作者: cattjiu    时间: 2003-1-28 19:07
所有的使用DAO一个一个记录去检查。
相加、相减、特征等问题使用left(),len(),val(),mid().do while过程判断。
比如判断AK14525
txt1=ak14525
len1=1
tt=len(txt1)
do while len1<tt
if left(txt1,1)<"a" then
ObjectValue=txt1
exit do
else
len1=2
end if
checkT=mid(txt1,len1,1)
if checkT<"a" then
ObjectValue=right(txt1,tt-len1)
exit do
len1=len1+1
loop
if len1=1 then
表字段值=val(txt1)+1
else
表字段值=left(txt1,len1) & val(mid(txt1,len1-1))+1
end if
msgbox "OK!"
end sub
只是思路,记得引用DAO。



作者: 竹笛    时间: 2003-1-28 19:08
以上问题最好是从源头控制,等问题出来了再处理不是个办法。
作者: eio    时间: 2003-1-28 19:29
cattjiu,你D方法都几复杂啊,就一个答案代码之多非吾辈能及,而竹笛兄的源头问题好像未明我要做什么,因为不是我能控制的,就2.1问题“2.1:有“0005601”的号码,需要加“1”转换为0005602,怎样办?”是应用在销售单上的,便于几张单据一齐输入,虽然不能计时入单就会计来讲有点欠佳,但实际需要的,单号可能没有,就用流水号,单号可能是发票(7位),可能是收据(X位),可能是0000001,又可能是10000001,我怎样控制呢?至于其他问题,我在做一个【支持无限分级的物料表】采用一表一窗体完成前进后退的所有功能需要,不忘谢谢大家
作者: cattjiu    时间: 2003-1-28 19:40
复杂也不复杂,不这样就手工搞定。
作者: Trynew    时间: 2003-1-28 19:48
把问题分成前导0和特征码两种方法处理,特征码又分为定长(或已知)和不定长。
前面两种很容易,最后要判断分离特征码复杂一点。
作者: eio    时间: 2003-1-28 19:54
trynew欲言又止了……简单介绍一下代码的方法嘛!
作者: Trynew    时间: 2003-1-28 21:52
刚才要去吃饭
下面给出一个文本数值混合编号的增减量函数,看是否有启发:
Function TextNumAdd(NumStr As String, NumAdd As Integer) As String '增量可以为负数
    Dim i As Integer
    Const zerostr = "00000000000000000000"
    '取右边数值字符串
    For i = 1 To Len(NumStr)
        If IsNumeric(Right(NumStr, i)) Then TextNumAdd = Right(NumStr, i)
    Next
    '如果数值加上增量的位数小于原来数值字符串则补0
    If Len(Trim(Str(Val(TextNumAdd) + NumAdd))) < Len(TextNumAdd) Then
        TextNumAdd = Left(NumStr, Len(NumStr) - Len(TextNumAdd)) & _
            Left(zerostr, Len(TextNumAdd) - Len(Trim(Str(Val(TextNumAdd) + NumAdd)))) & _
            Trim(Str(Val(TextNumAdd) + NumAdd))
    Else
        TextNumAdd = Left(NumStr, Len(NumStr) - Len(TextNumAdd)) & _
            Trim(Str(Val(TextNumAdd) + NumAdd))
    End If
End Function
作者: eio    时间: 2003-1-28 22:47
标题: trynew……
trynew,为人为到底吧,您的代码比较深,看得【象雾又象花】,您能帮我做一个实例吗,我很想念您的源码,因为您真好人啊,如果我的物料分类做好了,送个比你啦,祝您新年进步……
作者: Trynew    时间: 2003-1-28 23:19
那是因为帖子放上去把缩进空格都“吃”掉了。
这是一个函数,你靠过去就可以用了。
有空我做个实例方上去。
作者: Trynew    时间: 2003-1-29 00:09
标题: 实例
文件下载
作者: eio    时间: 2003-1-29 02:59
做得非常好trynew:
1,全部需求您都做到了。
2,语句精简。
日后还是多向您学习!谢谢您。顺便提醒trynew,您好像经常的忘记要使用NZ去掉空的字库串以免无效调用null啊
Private Sub Command6_Click()
    MsgBox TextNumAdd(Me.Text3, 1)
End Sub
改为:
Private Sub Command6_Click()
    MsgBox TextNumAdd(Nz(Me.Text3), 1)
End Sub


[此贴子已经被作者于2003-1-28 18:59:27编辑过]






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3