![]() |
#2
sych2025-09-08 10:56
|
只有本站会员才能查看附件,请 登录
有数据表2024级A.DBF,其中有学校、姓名、省学籍辅号、班级等,还有一个照片文件夹叫2024级照片(文件太大了,没法在此上传),照片用省学籍辅号命名,要求从2024级A.DBf中随机抽取50人(男女比例均衡),并将这50人照片从照片文件夹导出并另存
绞尽脑汁思考+询问dp,勉强写了下面语句,能初步实现取出50人。
请教各位大佬:
1.如何实现性别均衡后的班级人数相对均衡?
2.dp的语句忒繁琐,如何更简洁优化一下
3.这只是一个学校的,如果扩展的一个县市区,如何实现一次抽取所有不同学校的50人
4.同事不大会用VF,如果用Excel的话,能否简单实现

SET SAFETY OFF
CLOSE ALL
CLEAR
* 定义路径和文件夹名称
lcSourceTable = "2024级.DBF"
lcPhotoFolder = "2024级照片\"
lcExportFolder = "导出50人照片\"
* 处理导出文件夹
IF DIRECTORY(lcExportFolder)
* 删除导出文件夹中的所有文件
lcDeleteCmd = "DELETE FILE " + lcExportFolder + "*.*"
&lcDeleteCmd
? "已清空导出文件夹: " + lcExportFolder
ELSE
* 创建导出文件夹
MKDIR (lcExportFolder)
? "已创建导出文件夹: " + lcExportFolder
ENDIF
* 打开DBF文件
USE (lcSourceTable) ALIAS students
* 创建临时表并添加性别字段和随机数字段
SELECT *, SPACE(2) AS xb, 00000000000 AS sjs FROM students INTO CURSOR temp_cursor READWRITE
* 根据身份证号计算性别(第17位奇数为男,偶数为女)
REPLACE ALL xb WITH IIF(MOD(VAL(SUBSTR(身份证件号, 17, 1)), 2) = 1, "男", "女") IN temp_cursor
* 设置随机种子并生成随机数
RAND(-1)
REPLACE ALL sjs WITH RAND() * 1000000000 IN temp_cursor
* 分别选择男女各25人
SELECT * FROM temp_cursor WHERE xb = "男" ORDER BY sjs INTO CURSOR male_cursor TOP 25
SELECT * FROM temp_cursor WHERE xb = "女" ORDER BY sjs INTO CURSOR female_cursor TOP 25
* 合并结果
SELECT * FROM male_cursor UNION SELECT * FROM female_cursor INTO TABLE 导出top50.dbf ORDER BY 所在班级
* 复制照片文件
SELECT 导出top50
SCAN
lcStudentID = ALLTRIM(省学籍辅号)
lcSourcePhoto = lcPhotoFolder + lcStudentID + ".jpg"
lcTargetPhoto = lcExportFolder + lcStudentID + ".jpg"
IF FILE(lcSourcePhoto)
COPY FILE (lcSourcePhoto) TO (lcTargetPhoto)
ELSE
? "照片未找到: " + lcSourcePhoto
ENDIF
ENDSCAN
* 清理资源
CLOSE ALL
? "操作完成。已成功随机抽取50名学生(男女各25人)并复制照片。"
[此贴子已经被作者于2025-9-8 14:42编辑过]