标题:【求助】准考证中考场,座位编排(根据表中某个字段的内容不同,考场座位不 ...
只看楼主
小池lau
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-4-23
结帖率:0
已结贴  问题点数:20 回复次数:11 
【求助】准考证中考场,座位编排(根据表中某个字段的内容不同,考场座位不同)方法
各位朋友,您们好!
考场,座位拉通排的代码:
use zkz
zwh=1
kch=1
Scan
Replace zw With Padl(zwh,2,[0])   
Replace kc With Padl(kch,3,[0])
zwh=zwh+1
If zwh>30
zwh=1
kch=kch+1
Endif
Endscan
Browse
但,现在遇到个问题,考场座位号要根据表中另一列的内容变动而变动。
根据sj字段的升序,考场号也升序排列,sj字段不同后,考场也需相应的增加1.直至整个数据排完。
只知道方法是需要做个判定sj不一致,考场号+1.但是这个代码试了很多,都不得行。但是试了很多方式都不行。请朋友们帮帮忙。非常感谢!
如图所示:(该图是手工处理考场,座位后的图)。
搜索更多相关主题的帖子: 准考证 座位号 
2013-04-23 10:59
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:4 
你的sj并没在程序中出现

只求每天有一丁点儿的进步就可以了
2013-04-23 12:14
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
程序代码:
CLOSE DATABASES
SELECT 0
use zkz
zwh=1
kch=1
csj=sj
SCAN

 IF  !csj=sj
  csj=sj
  zwh=1
  kch=kch+1
  Replace zw With Padl(zwh,2,[0])   
  Replace kc With Padl(kch,3,[0])
  zwh=zwh+1  

 ELSE
  Replace zw With Padl(zwh,2,[0])   
  Replace kc With Padl(kch,3,[0])
  zwh=zwh+1
  If zwh>30
    zwh=1
    kch=kch+1
  Endif

 ENDIF 
Endscan
Browse
应该要对sj建索引,相同的排在一起才行

只求每天有一丁点儿的进步就可以了
2013-04-23 12:35
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:4 
CLOSE ALL
SET SAFETY OFF
SET TALK OFF

UPDATE Zkz SET Kc="0"+RIGHT(Sj,2)
UPDATE Zkz SET Kc="0"+Kc WHERE LEN(ALLTRIM(Kc))<3
SELECT Zkz
INDEX ON Kc TAG Kc
GO TOP
Kch=Kc
Zwh=0
SCAN
    IF Kc#Kch
       Zwh=0
       Kch=Kc
    ENDIF
    Zwh=Zwh+1
    REPLACE Zw WITH PADL(Zwh,2,[0])
ENDSCAN

BROWSE
CLOSE ALL
SET SAFETY ON
SET TALK ON
RETURN

[ 本帖最后由 taifu945 于 2013-4-23 14:16 编辑 ]
2013-04-23 14:11
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:4 
use zkz
INDEX ON sj to id
zwh=1
kch=0
n=ALLTRIM(sj)
SCAN
    If kch=30
        zwh=zwh+1
        kch=0
    ENDIF     
    IF n!=ALLTRIM(sj)
        kch=kch+1
    ELSE
        kch=1
        n=ALLTRIM(kc)
    ENDIF         
    REPLACE kc With PADL(zwh,3,"0"),zw With PADL(kch,2,"0")
ENDSCAN
BROWSE


相互学习,互相交流,共同提高。
2013-04-23 15:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
程序代码:
CREATE CURSOR ZKZ (ZW C(2),KC C(3),SJ C(7))
FOR I=1 TO ALINES(A,[16,23,41,70],[,])
    FOR J =1 TO CAST(A(I) AS N(2))
        INSERT INTO ZKZ VALUES ([],[],[20801]+PADL(I,2,[0]))
    ENDFOR
ENDFOR
STORE 1 TO ZWH,KCH
SJH=[]
SCAN
    IF ZWH>30 OR SJ!=SJH
       ZWH=1
       KCH=KCH+1
    ENDIF
    REPLACE ZW WITH PADL(ZWH,2,[0])
    REPLACE KC WITH PADL(KCH,3,[0])
    ZWH=ZWH+1
    SJH=SJ
ENDSCAN
BROWSE
USE IN ZKZ

坚守VFP最后的阵地
2013-04-24 00:45
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用sdta在2013-4-24 00:45:43的发言:

CREATE CURSOR ZKZ (ZW C(2),KC C(3),SJ C(7))
FOR I=1 TO ALINES(A,[16,23,41,70],[,])
    FOR J =1 TO CAST(A(I) AS N(2))
        INSERT INTO ZKZ VALUES ([],[],[20801]+PADL(I,2,[0]))
    ENDFOR
ENDFOR
STORE 1 TO ZWH,KCH
SJH=[]
SCAN
    IF ZWH>30 OR SJ!=SJH
       ZWH=1
       KCH=KCH+1
    ENDIF
    REPLACE ZW WITH PADL(ZWH,2,[0])
    REPLACE KC WITH PADL(KCH,3,[0])
    ZWH=ZWH+1
    SJH=SJ
ENDSCAN
BROWSE
USE IN ZKZ
红色句出错

只求每天有一丁点儿的进步就可以了
2013-04-24 13:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 7楼 wengjl
这是 VFP9 版本的代码

坚守VFP最后的阵地
2013-04-24 13:32
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
Visual FoxPro 9.0 语言参考
CAST( ) 函数

把一个表达式从一种数据类型到另一种数据类型。
 
CAST(eExpression AS cDataType [(nFieldWidth [, nPrecision])]
   [NULL | NOT NULL])
 

参数
eExpression
指定一个数据表达式, 通常是在一条 SQL 语句中的你想转换到另一种数据类型的。eExpression 可以是一个字段, 计算字段或其它表达式类型。
cDataType
指定合法的名字或表示目标数据类型名子的字母。cDataType 也可以是一个等价于合法数据类型或代表合法数据类型的字母的表达式。

坚守VFP最后的阵地
2013-04-24 13:34
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:295
专家分:805
注 册:2012-6-15
得分:4 
USE zkz
 INDEX on sj TO msj     &&以sj作为索引依据
 GO TOP
 DO whil NOT EOF()
   msj=sj
   kch=1
 DO whil NOT EOF() AND sj=msj     &&当sj改变或者zwh达到30时,考场号增加1
   zwh=1   
  DO whil NOT EOF() AND sj=msj AND zwh<=30  &&当座位号大于30时,跳出本次循环
   Replace zw With Padl(zwh,2,[0])     &&替换座位号  
   Replace kc With Padl(kch,3,[0])     &&替换考场号
   SKIP
   zwh=zwh+1
  ENDDO
   kch=kch+1
  ENDDO
 ENDDO  &&当到达文件尾时,结束循环
 BROWSE   

学习交流VFP,QQ:248561326。
2013-04-24 16:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-405209-1-1.html




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

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