| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2012 人关注过本帖
标题:热点求助:如何把一个有250多列(即有250多个字段名)的DBF表按一定规则排列 ...
只看楼主 加入收藏
xuevfp89
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2014-1-22
结帖率:100%
收藏
已结贴  问题点数:60 回复次数:40 
热点求助:如何把一个有250多列(即有250多个字段名)的DBF表按一定规则排列重新生成另一个DBF表?
    有一个有250多列(即有205多个字段名)的“样本表.DBF”(里面可能会有很多行内容),按每列空格数量从多到少(即没有出现数字1)把字段名重新排序,把所有列所有内容也跟着复制过去重新生成另一个名为“排序表.DBF”。         样本表第1、第2列照样复制过去在“排序”表的第1、第2列,样本表倒数第1、第2列照样复制过去在“排序”表的倒数第1、第2列。  样本表的第1列为数值型,第2列为字符型,倒数第1列为数值型,倒数第2列为字符型,其余的每列字段均为数值型。


样本表图解说明如下:
图片附件: 游客没有浏览图片的权限,请 登录注册


生成的“排序”表部分截图如下:
图片附件: 游客没有浏览图片的权限,请 登录注册


样本表.zip (1.91 KB)
搜索更多相关主题的帖子: 如何 倒数 样本 
2014-03-12 10:43
xuevfp89
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2014-1-22
收藏
得分:0 
如何编程实现?版主们不要开骂啊,我真的很怕。我是真的解决不了才放到论坛求助的。
2014-03-12 10:45
xuevfp89
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2014-1-22
收藏
得分:0 
样本表有多少行,重新生成的排序表也跟着有多少行。排序表每列里的1的位置跟样本表的该列的1的位置相同。
2014-03-12 11:13
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:0 
回复 3楼 xuevfp89
是这样吗:
pxb.rar (1.1 KB)

可以编程实现,用VBA操控Excel实现,不过要化点功夫。

相互学习,互相交流,共同提高。
2014-03-12 12:14
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
还是看不明白楼主的意图,文字描述很不严谨,比如:“按每列空格数量从多到少”的描述就有问题。“每列”是否包含前 2 列和最后 2 列?中间列都是数值型数据怎么又按“空格”数量多少?
从生成的结果图中看,“号13568”列与“号13560”列都只含有1个“1”,为何“号13568”排在“号13560”的前面?只要明白了楼主的排序依据,处理起来应该不难。

泉城飞狐
2014-03-12 12:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:60 
程序代码:
CREATE CURSOR T (FIELD_NAME C(10),NUM N(4)) && 过渡表
SELECT * FROM 样本表 INTO CURSOR TEMP READWRITE
*--- 在数据表最后插入一条记录
INSERT INTO TEMP ((FIELD(2))) VALUES (PADC("小计",FSIZE(FIELD(2)),"-"))

FOR I=3 TO FCOUNT()-2
    IF TYPE(FIELD(I))="N"
       COUNT TO HJ FOR EMPTY(EVALUATE(FIELD(I))) AND RECNO()<RECCOUNT()
       *--- 数值型字段计数,并将结果添加到最后一条记录
       REPLACE RECORD RECCOUNT() (FIELD(I)) WITH HJ IN TEMP
       INSERT INTO T VALUES ((FIELD(I,[TEMP])),HJ)
    ENDIF
ENDFOR
SELECT * FROM T ORDER BY 2 DESC INTO CURSOR TEMP1
LCSTR=[]
SCAN
   LCSTR=LCSTR+ALLTRIM(FIELD_NAME)+IIF(RECNO()<RECCOUNT(),[,],[])
ENDSCAN
SELECT 期数,种类,&LCSTR,类别,期号 FROM 样本表


[ 本帖最后由 sdta 于 2014-3-12 13:27 编辑 ]

坚守VFP最后的阵地
2014-03-12 13:09
xuevfp89
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2014-1-22
收藏
得分:0 
回复4楼:4楼的结果完全正确,但也有不足:没有出现1的空格应该继续保持空格,不应该变成0,而且必须是在VFP软件中编程才对啊。

回复5楼(1)“每列”是否包含前 2 列和最后 2 列?       回答:“每列”,不包含前 2 列和最后 2 列;
         (2)中间列都是数值型数据怎么又按“空格”数量多少?   回答:中间列都是数值型数据,每列空格数量从多到少排序(即没有出现数字1),也即是按出现1的次数从少到多把字段名排序。

回复6楼:
编程执行到第2行时显示:“命令中含有不能识别的短语或关键字”,我不懂解决啊。
2014-03-12 15:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
6楼代码是VFP9版本
SELECT * FROM 样本表 INTO CURSOR TEMP READWRITE
可改为VFP6代码:
SELECT * FROM 样本表 INTO TABLE TEMP
在6楼代码的最后一行,加下面代码
USE IN TEMP
ERASE TEMP.DBF && 删除TEMP.DBF,是不想在文件夹中增加无用的数据表

坚守VFP最后的阵地
2014-03-12 15:19
xuevfp89
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2014-1-22
收藏
得分:0 
执行编程后,它只临时显示一个“查询”表,关闭后,“查询”表也跟着消失了。要怎样才能把“查询”表转化为结果表,可随时打开观看?
2014-03-12 16:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 9楼 xuevfp89
运行这段代码就行了
SELECT 期数,种类,&LCSTR,类别,期号 FROM 样本表


改为:
SELECT 期数,种类,&LCSTR,类别,期号 FROM 样本表 INTO TABLE CXB



坚守VFP最后的阵地
2014-03-12 16:46
快速回复:热点求助:如何把一个有250多列(即有250多个字段名)的DBF表按一定规 ...
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019384 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved