| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 922 人关注过本帖
标题:求解:怎么把姓名分开
只看楼主 加入收藏
ynsdldp
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-15
结帖率:75%
收藏
已结贴  问题点数:15 回复次数:11 
求解:怎么把姓名分开
bj.rar (572 Bytes)
bj1.rar (582 Bytes)

bj.dbf中有两个字段,分别为banji(班级),jiaoshi(教师),其中jiaoshi字段存放的数据如:李明、王风华、李小鹏、王品、赵书明、郑斐然,每位教师中间用顿号隔开,求教如何将教师分开成不同的行,数据格式如bj1.dbf
谢谢!
搜索更多相关主题的帖子: 李小鹏 姓名 教师 如何 
2013-11-16 10:00
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:3 
CLOSE DATABASES
USE bj IN 0
USE bj1 IN 0 EXCLUSIVE
ZAP IN bj1
SELECT bj
SCAN
    i1=ALINES(arr1,ALLTRIM(jiaoshi),'、')
    FOR i2=1 TO i1
        INSERT INTO bj1 (banji,jiaoshi) VALUES (bj.banji,arr1[i2])
    ENDFOR
ENDSCAN
CLOSE DATABASES
2013-11-16 10:15
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:3 
程序代码:
CLOSE TABLES
USE bj
CREATE CURSOR T (banji C(10),jiaoshi C(10))
SELECT bj
SCAN
FOR I=1 TO ALINES(AXX,ALLTRIM(jiaoshi),[])
    INSERT INTO T (banji,jiaoshi) VALUES (bj.banji,AXX[i])
ENDFOR
ENDSCAN
SELECT * FROM T INTO dbf bj1
SELECT T
BROWSE
2013-11-16 13:49
ynsdldp
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-15
收藏
得分:0 
回复 3楼 tlliqi
运行不成功啊,请你再看看
2013-11-16 14:29
ynsdldp
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-15
收藏
得分:0 
回复 2楼 bccn0906
运行不成功
2013-11-16 14:29
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:3 
程序代码:
SET TALK OFF
SET SAFETY OFF
CLOSE ALL

CREATE TABLE Bj1 (班级 V(50) , ;
                  教师名 V(100)) &&“V”是可变长字符串,性能优于C型
USE Bj
SCAN
   顿号数=OCCURS('',Bj.JiaoShi) &&先取当前记录的顿号数量
   FOR I=1 TO 顿号数
      上一顿号位置=IIF(I>1,当前顿号位置,0) &&保留前一个顿号位置备用
      当前顿号位置=ATCC('',Bj.JiaoShi,I)
      姓名=SUBSTRC(Bj.JiaoShi,上一顿号位置+1,当前顿号位置-上一顿号位置-1)
      INSERT INTO Bj1 VALUES (Bj.BanJi,姓名)
   NEXT
   姓名=TRIM(SUBSTRC(Bj.JiaoShi,当前顿号位置+1)) &&处理最后一个顿号后的姓名
   INSERT INTO Bj1 VALUES (Bj.BanJi,姓名)
   SELECT Bj
ENDSCAN

SET TALK ON
SET SAFETY ON
CLOSE ALL

2013-11-16 15:09
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用ynsdldp在2013-11-16 14:29:04的发言:

运行不成功啊,请你再看看
vfp9的代码

图示
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-11-16 15:24
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:3 
程序代码:
CLOSE DATABASES
SELECT 0
USE bj
SELECT 0
USE bj1
SELECT bj
SCAN
  bjmc=bj.banji
  jsxm=ALLTRIM(bj.jiaoshi)
  kg=.T.
  DO whil kg
    dh=AT('',jsxm)   &&&& 从左到右获取第一个“、”号
    cxm=SUBSTR(jsxm,1,dh-1)      &&&& 截取第一个“、”号前的姓名
    IF dh=0   &&&& 如果“、”号没有了,那就只有最后一个姓名了,直取
      cxm=jsxm
      kg=.F.  &&&& 结束取姓名的循环
    ENDIF
    jsxm=SUBSTR(jsxm,dh+2)   &&&& 截取第一个“、”号的字符串
    SELECT bj1
    APPEND BLANK
    REPLACE bj1.banji with bjmc
    REPLACE bj1.jiaoshi with cxm 
  ENDDO
  SELECT bj
ENDSCAN 
我的VFP8.0的,测试成功的

只求每天有一丁点儿的进步就可以了
2013-11-16 16:08
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:3 
2楼代码简洁、有效。测试无误。
稍做优化:
CLOSE DATABASES
USE bj
USE bj1 IN 0 EXCLUSIVE
ZAP IN bj1
SCAN
    i1=ALINES(arr1,ALLTRIM(jiaoshi),'、')
    FOR i2=1 TO i1
        INSERT INTO bj1 (banji,jiaoshi) VALUES (bj.banji,arr1[i2])
    ENDFOR
ENDSCAN
sele bj1
brow

相互学习,互相交流,共同提高。
2013-11-16 16:42
b土木丁口
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:264
专家分:189
注 册:2013-9-12
收藏
得分:3 
学习
2013-11-16 21:28
快速回复:求解:怎么把姓名分开
数据加载中...
 
   



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

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