| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 137 人关注过本帖
标题:随机抽取50人及照片
取消只看楼主 加入收藏
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:410
专家分:133
注 册:2015-4-18
结帖率:100%
收藏
 问题点数:20 回复次数:1 
随机抽取50人及照片
2024级a.rar (8.85 KB)

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

搜索更多相关主题的帖子: 随机 照片 SELECT 导出 文件夹 
昨天 10:12
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:410
专家分:133
注 册:2015-4-18
收藏
得分:0 
回复 2楼 sych
可否示列一下

昨天 11:17
快速回复:随机抽取50人及照片
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015778 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved