| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3426 人关注过本帖, 1 人收藏
标题:如何解决想在一个字段里存放800多个符的问题
只看楼主 加入收藏
hn9810
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2010-7-13
收藏
得分:0 
好的,不急,谢谢
2012-08-20 20:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果你用VFP7执行时在那行上出现问题,会不会是VFP7的COPY STRUCTURE EXTENDED出来的DBF格式与VFP9不同?我看你最好还是下个VFP9的好,否则我无法知道VFP7下会不会有问题,只能保证在VFP9下没事。

授人以渔,不授人以鱼。
2012-08-20 20:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
改过了程序的写法,这次不用生成外部结构表,直接生成目标数据表。如果VFP7再不支持SQL CREATE TABLE FROM ARRAY指令,或此指令不兼容,那我也难搞了。

hn9810.zip (32.75 KB)


程序代码:
CLOSE DATABASES ALL
SET SAFETY OFF           && 关闭文件删除和覆盖提示
SET DECIMALS TO 4        && 设置浮点数显示小数点后4位
CLEAR 

Import_Table("53.TXT", "Table_53")

RETURN 

*-----------------------
* 功能:从外部文本文件生成VFP表数据
* 参数:tcDataFileName -- 文本文件名(可带路径)
*       tcTableName    -- 生成的数据表文件名
* 返回:操作成功为.T.,否则为.F.
*-----------------------
FUNCTION Import_Table(tcDataFileName, tcTableName)
    LOCAL lnHandle, lnLine, lcFieldName, lnIndex
    LOCAL lnFields, lnRecords
    LOCAL llSuccess
   
    OPEN DATABASE DATA1 EXCLUSIVE             && 打开数据库
    SET DATABASE TO DATA1
    USE Dictionary EXCLUSIVE IN 0             && 打开数据字典
   
    * 用低级文件模式打开文本文件
    lnHandle = FOPEN(tcDataFileName)
    IF lnHandle < 0
        MESSAGEBOX("数据文件" + tcDataFileName + "打开失败!", 16)
        RETURN .F.
    ENDIF
   
    * 跳过前面9行
    FOR lnLine = 1 TO 9
        FGETS(lnHandle)
    NEXT
   
    * 获取字段数
    lnFields = INT(VAL(FGETS(lnHandle)))
   
    llSuccess = .T.
   
    * 创建数据表结构
    LOCAL laFields[lnFields,18]          && 建立数据表结构数组,行数为刚才读得的字段数,列数为结构规定的18列
    FOR lnLine = 1 TO lnFields           && 依次读入字段名并查找数据字典设置每个字段的结构
        lcFieldName = ALLTRIM(FGETS(lnHandle))
        SELECT Dictionary
        LOCATE ALL FOR ALLTRIM(Dictionary.Field_Name) == lcFieldName
        IF !FOUND()
            MESSAGEBOX("发现数据字典中没有的字段:" + lcFieldName, 16)
            llSuccess = .F.
            EXIT
        ENDIF
        * 将数据字典中该字段的信息复制到结构数组对应行
        FOR lnIndex = 1 TO ALEN(laFields,2)
            laFields[lnLine,lnIndex] = EVALUATE(FIELD(lnIndex, "Dictionary"))
        NEXT
    NEXT
    USE IN Dictionary                    && 因为所需的数据结构已抄到数组中,现在不需要数据字典了
   
    IF llSuccess
        IF INDBC(tcTableName, "TABLE")
            * 如果目标数据表已存在于数据库中,则先移除之
            REMOVE TABLE (tcTableName)
        ENDIF
        * 生成数据空表
        CREATE TABLE (tcTableName) NAME (tcTableName) FROM ARRAY laFields
        * 导入数据
        lnRecords = INT(VAL(FGETS(lnHandle)))        && 获取记录数
        FOR lnLine = 1 TO lnRecords                  && 依次读入每条记录
            SELECT (tcTableName)
            APPEND BLANK
            FOR lnIndex = 1 TO lnFields              && 依次读入每个字段
                LOCAL lcBuffer
                * 字段结构数组的使用法:
                * 第1列为字段名
                * 第2列为字段类型
                * 第3列为字段宽度
                * 第4列为浮点型字段的小数位数
                lcBuffer = FREAD(lnHandle, laFields[lnIndex,3])
                DO CASE
                    CASE laFields[lnIndex,2] == "C"
                        REPLACE (laFields[lnIndex,1]) WITH lcBuffer
                    CASE laFields[lnIndex,2] == "N"
                        REPLACE (laFields[lnIndex,1]) WITH StringToNumeric(lcBuffer, laFields[lnIndex,3], laFields[lnIndex, 4])
                ENDCASE
            NEXT
            FGETS(lnHandle)
        NEXT
    ENDIF
   
    * 关闭低级文件句柄
    FCLOSE(lnHandle)
   
    * 关闭打开的数据库
    SET DATABASE TO DATA1
    CLOSE DATABASES 

    * 返回操作结果
    RETURN llSuccess
   
ENDFUNC

*------------------------
* 功能:将字符串转换为浮点数
*------------------------
FUNCTION StringToNumeric(tcString, tnLen, tnDec)
    RETURN VAL(LEFT(tcString, tnLen - tnDec - 1) + "." + RIGHT(tcString, tnDec))
ENDFUNC

授人以渔,不授人以鱼。
2012-08-21 03:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
知识不是一天两天就能积累起来的,不会走,就想跑,难啊。
VFP6.0命令
CREATE CURSOR – SQL 命令
创建一个临时表。
语法
CREATE CURSOR dbf_name
(fname1 type [(precision [, scale])
[NULL | NOT NULL]
[CHECK lExpression [ERROR cMessageText]]
[DEFAULT eExpression]
[UNIQUE]
[NOCPTRANS]]
[, fname2 ...]])
| FROM ARRAY ArrayName

从楼主过去发的帖子,就可见一斑。

[ 本帖最后由 sdta 于 2012-8-21 08:40 编辑 ]

坚守VFP最后的阵地
2012-08-21 08:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没留意查看历史,果然是两年了所问的问题似乎都是围绕这个而来的,难道是一直都没解决?

授人以渔,不授人以鱼。
2012-08-21 13:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
0.0001天打鱼,2.9999天晒网

[ 本帖最后由 sdta 于 2012-8-21 14:01 编辑 ]

坚守VFP最后的阵地
2012-08-21 13:59
lqk163
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-4-21
收藏
得分:0 
SET MEMOWIDTH TO 数值 &&& 要多大,自行设置
2012-08-22 12:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
还能顶上去吗?

授人以渔,不授人以鱼。
2012-09-26 14:27
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
看完这个帖子 了至少③次。。。

梅尚程荀
马谭杨奚







                                                       
2012-09-26 14:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用有容就大在2012-9-26 14:59:34的发言:

看完这个帖子 了至少③次。。。

你笑啥?

授人以渔,不授人以鱼。
2012-09-26 15:09
快速回复:如何解决想在一个字段里存放800多个符的问题
数据加载中...
 
   



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

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