在程序中有自己的语法是非常有用的,但如何解析就比较难,如我做一个分析工资项目计算关系的代码。
  显示名            表字段  
  应发合计          F_1
  扣款合计          F_2
  实发合计          F_3
  所得税            F_4
  岗位工资          F_5
  加班工资          F_6
  技术津贴          F_7
  病假扣款          F_8
  其他扣款          F_9
当用户设置公式:应发合计=岗位工资+加班工资+技术津贴
经分析得出:F_1=F_5+F_6+F_7请高手给出最快的方法!

解决方案 »

  1.   

    就是把“应发合计=岗位工资+加班工资+技术津贴”解析成“F_1=F_5+F_6+F_7”啊!
      

  2.   

    按照这个对应关系 
    显示名            表字段  
      应发合计          F_1
      扣款合计          F_2
      实发合计          F_3
      所得税            F_4
      岗位工资          F_5
      加班工资          F_6
      技术津贴          F_7
      病假扣款          F_8
      其他扣款          F_9

    TStr="应发合计=岗位工资+加班工资+技术津贴"
    解析为
    TStr2="F_1=F_5+F_6+F_7"
      

  3.   


    建立个结构体
    type udtNameMap
       srcName as string 
       desName as string
    end typedim namemap(xxx) as udtnamemap
    namemap(0).srcname = "应发工资"
    namemap(1).srcname = "F_1"
    ...
    然后在vb中用repalce循环替换。
      

  4.   

    在SQL中如下处理: 测试:
    create table test (a varchar(20),b varchar(20))
    insert test select '应发合计','F_1'
    union all select '扣款合计','F_2'
    union all select '实发合计','F_3'
    union all select '所得税','F_4'
    union all select '岗位工资','F_5'
    union all select '加班工资','F_6'
    union all select '技术津贴','F_7'
    union all select '病假扣款','F_8'
    union all select '其他扣款','F_9'
    declare @s1 varchar(100)
    set @s1 = '应发合计=岗位工资+加班工资+技术津贴'
    declare @a varchar(20),@b varchar(20)
    declare cur cursor for select a,b from test
    open cur
    fetch next from cur into @a,@b
    while @@fetch_status = 0
    begin
        set @s1 = replace(@s1,@a,@b)
        fetch next from cur into @a,@b
    end
    close cur
    deallocate cur
    select @s1
    -- drop table test------------------ 
    F_1=F_5+F_6+F_7(所影响的行数为 1 行)
      

  5.   

    不是这样的,要在程序中对输入的字符进行检查,如果没有按规则输入,要提示在什么地方错了。如果是正确了,就把字符按照以下对应关系解析出来。
    显示名            内部名  
      应发合计          F_1
      扣款合计          F_2
      实发合计          F_3
      所得税            F_4
      岗位工资          F_5
      加班工资          F_6
      技术津贴          F_7
      病假扣款          F_8
      其他扣款          F_9
      +                 +
      -                 -
      *                 *
      /                 /如果输入了:应发合计=A +      岗位工资+加班工资+技术津贴
    在分析时截掉空格:应发合计=A+岗位工资+加班工资+技术津贴
    在解析时发现没有关键字“A”,就提示“无法识别A!”
      

  6.   

    同意建立對應關系的想法﹗﹗﹗只有建立一一對應關系后才可以這樣做﹐PowerBuild就是這樣子做的。
      

  7.   

    是的!我写了一段代码,最基础的解析方法,但如果加入了数字或括号就不好解析了。Option Explicit
    Dim TFields() As String
    Dim FCount As IntegerPrivate Sub Command1_Click()
        Dim I As Long
        Dim TStart As Long
        Dim TLen As Long
        
        Dim TStr As String
        Dim TS1 As String
        Dim TS2 As String
        Dim TFormula As String
        TStart = 1
        TLen = 1
        TStr = Text1.Text
        For I = 1 To Len(TStr)
            TS1 = Mid(TStr, TStart, TLen)
            TS2 = GetFieldName(TS1)
            If Len(TS2) > 0 Then
                TLen = 1
                TStart = I + 1
                'I = I + Len(TS1) - 1
                TFormula = TFormula & TS2
            Else
                TLen = TLen + 1
            End If
        Next
        MsgBox TFormula
    End SubFunction GetFieldName(ByVal TSS As String) As String
        Dim I As Integer
        For I = 0 To FCount - 1
            If TSS = TFields(I, 0) Then
                GetFieldName = TFields(I, 1)
                Exit Function
            End If
        Next
    End FunctionPrivate Sub Command2_Click()
        MsgBox Mid("www.ufsoft.com", 0, 1)
    End SubPrivate Sub Form_Load()
        Init
        Text1.Text = ""
        Text2.Text = ""
    End SubSub Init()
        Dim I As Integer
        FCount = 13
        ReDim TFields(FCount - 1, 1)
        
        TFields(0, 0) = "+"
        TFields(1, 0) = "-"
        TFields(2, 0) = "*"
        TFields(3, 0) = "/"
        TFields(4, 0) = "应发合计"
        TFields(5, 0) = "扣款合计"
        TFields(6, 0) = "实发合计"
        TFields(7, 0) = "所得税"
        TFields(8, 0) = "岗位工资"
        TFields(9, 0) = "加班工资"
        TFields(10, 0) = "技术津贴"
        TFields(11, 0) = "病假扣款"
        TFields(12, 0) = "其他扣款"
        
        TFields(0, 1) = "+"
        TFields(1, 1) = "-"
        TFields(2, 1) = "*"
        TFields(3, 1) = "/"
        TFields(4, 1) = "F_1"
        TFields(5, 1) = "F_2"
        TFields(6, 1) = "F_3"
        TFields(7, 1) = "F_4"
        TFields(8, 1) = "F_5"
        TFields(9, 1) = "F_6"
        TFields(10, 1) = "F_7"
        TFields(11, 1) = "F_8"
        TFields(12, 1) = "F_9"
        With List1
            .Clear
            For I = 0 To FCount - 1
                .AddItem TFields(I, 0)
            Next
        End With
    End SubPrivate Sub List1_DblClick()
        Text1.Text = Text1.Text & List1.Text
    End Sub
      

  8.   

    用得这样吗?你定一个语句:
    sql=" select 应发合计=A +      岗位工资+加班工资+技术津贴 from table name"
     如果用户输入了合法的字符,就在程序号捕捉错误信息,给出提示,如果要加括号和其它,也不