注册 登录
编程论坛 VFP论坛

随机抽取50人及照片

chychychy 发布于 2025-09-08 10:12, 415 次点击
只有本站会员才能查看附件,请 登录

有数据表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编辑过]

4 回复
#2
sych2025-09-08 10:56
在每个班级里单独随机抽取50*班级人数/年级人数
#3
chychychy2025-09-08 11:17
回复 2楼 sych
可否示列一下

#4
xuminxz2025-09-08 17:08
建立一个临时表,只有一个字段__班级;循环班级表,调用你上面的代码就可以了。
Excel也可以,需要用VBA,代码量差不多。

#5
hsfisher7 天前 08:25
Mark一哈
1