注册 登录
编程论坛 VFP论坛

从“费用明细”中动态提取费用类型并自动生成字段

王咸美 发布于 2025-10-19 11:20, 333 次点击
现有“费用明细帐.dbf ",其中“费用明细”中含“车费”、“餐费”、”住宿费”、“快递费”,我想生成的“费用统计表.dbf",其中的车费、餐费、住宿费、快递费等字段名由“费用明细”中的费用类型动态生成,不知代码如何写,请高手赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2025-10-19 11:22编辑过]

21 回复
#2
吹水佬2025-10-19 13:14
上次有“元”,这次没了“元”,之后还有没有“元”?
#3
王咸美2025-10-19 13:23
加上“元”是不是程序要简单些?如果这样就在数据后面加上“元”
#4
吹水佬2025-10-19 14:08
以下是引用王咸美在2025-10-19 13:23:46的发言:

加上“元”是不是程序要简单些?如果这样就在数据后面加上“元”


这“元”可以随便加减,“费用明细”是怎样生成的?
#5
王咸美2025-10-19 14:24
“费用明细”是表文件 费用明细帐.dbf中的字段内容,附件中有 费用明细帐.dbf
#6
nbwww2025-10-19 14:42
朋友你这数据是怎么来的?数据输入的时候控制一下不好吗?前期谋划的时候考虑一下后面的细节会省不少事
#7
sam_jiang2025-10-19 15:35
那哪有这样设计数据表的?
#8
王咸美2025-10-19 15:43
修改后的文件如下:
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#9
吹水佬2025-10-19 15:54
回复 8楼 王咸美
现在不是有元没元的问题
先了解一下费用明细字段的数据是怎样来的?
#10
王咸美2025-10-19 16:20
是从网上下载的数据,经过修改得到的。

[此贴子已经被作者于2025-10-19 16:21编辑过]

#11
吹水佬2025-10-19 16:59
回复 10楼 王咸美
可以编程取出网页的数据再写入DBF,不用这样转来转去转到头都晕。

[此贴子已经被作者于2025-10-19 17:00编辑过]

#12
王咸美2025-10-19 17:09
原始表是:费用明细帐.dbf
结果表是:费用统计表.dbf,表中字段“车费”、“餐费”、“住宿费”、“快递费”由“费用明细”产生,具体有哪些费用不固定,随着“费用明细帐.dbf”中记录的增加,还可能出现“通讯费”、“交通费”等。
#13
吹水佬2025-10-19 18:02
回复 12楼 王咸美
这些数据的网页我可以打开看看吗?
#14
王咸美2025-10-19 18:14
只有本站会员才能查看附件,请 登录
#15
王咸美2025-10-19 18:18
具体网页链接未记住,截图发给您看一看。

#16
nbwww2025-10-19 18:19
服了
#17
王咸美2025-10-19 18:39
不知根据提供的“费用明细帐.dbf "能否动态生成“费用统计表.dbf "?盼指点!
#18
csyx2025-10-19 19:20
何必自寻烦恼,直接交给ds处理完复制回来得了
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2025-10-19 19:27编辑过]

#19
nbwww2025-10-19 19:54
今天DS相当给力  竟然完美解决
程序代码:
CLEAR
* 测试不同的文本格式
LOCAL lcTestText
lcTestText = "快递费8.车费8.36 住宿费180,餐费-60   10月8日  车费8.36 住宿费180元,餐费60.63元"
DO EnhancedRegExpExtract WITH lcTestText

* 增强版正则表达式提取
PROCEDURE EnhancedRegExpExtract(tcString)
    LOCAL loRegEx, laMatches, loMatch
    LOCAL lcPattern
    * 更强大的正则表达式模式
    lcPattern = "(" + ;
                "车费|餐费|住宿费|快递费|交通费|水电费|电话费|网络费|办公费|" + ;
                "材料费|印刷费|差旅费|会议费|培训费|招待费|福利费|其他" + ;
                ")" + ;
                "[::,.、\s]*" + ;  && 各种可能的分隔符
                "(-?\d+(?:\.\d+)?)" + ;  && 金额
                "(?:元)?"          && 可选的单位
   
    loRegEx = CREATEOBJECT("VBScript.RegExp")
    loRegEx.Pattern = lcPattern
    loRegEx.Global = .T.
    CREATE CURSOR 提取结果 (原始文本 C(100), 费用名称 C(10), 金额 N(10,2), 匹配位置 I)
    laMatches = loRegEx.Execute(tcString)
   
    ? "增强版正则表达式提取:" + CHR(13) + CHR(10)
    ? "输入文本: " + tcString + CHR(13) + CHR(10)
    ? "----------------------------------------"
   
    FOR EACH loMatch IN laMatches
        IF loMatch.SubMatches.Count >= 2
            lcExpenseName = loMatch.SubMatches(0)
            lcAmount = loMatch.SubMatches(1)
            
            INSERT INTO 提取结果 VALUES ;
                (loMatch.Value, lcExpenseName, VAL(lcAmount), loMatch.FirstIndex)
            
            ? "匹配文本: " + loMatch.Value
            ? "费用名称: " + lcExpenseName + "  金额: " + lcAmount
            ? "---"
        ENDIF
    ENDFOR
   
    SELECT 提取结果
    BROWSE TITLE "增强版正则表达式提取结果"
   
    * 按费用名称汇总
    SELECT 费用名称, SUM(金额) as 总金额, COUNT(*) as 出现次数 ;
    FROM 提取结果 ;
    GROUP BY 费用名称 ;
    ORDER BY 总金额 DESC
   
    BROWSE TITLE "费用汇总统计"
ENDPROC
#20
nbwww2025-10-19 19:58
今天心血来潮去试下DS,竟然发现有什么框竟然试图在训练DS了,给出的答案竟然是某框,这样也可以
#21
王咸美2025-10-19 20:18
谢谢!但这并不是我要的结果。,
#22
schtg2025-10-20 06:19
回复 19楼 nbwww
1