| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2853 人关注过本帖
标题:文本内容超长,导入的问题
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
cStr1 = "把一串截为3段,如果含有不定长双字节字符就不能随便截断, 既然用到备注字段,为何还要截断来保存?" + ;
        "先把文本导入到备注字段,在按长度分别导出这三个字段内容,能行不?" + ;
        "人发可个方和方经品他三方登1山泛水多福多寿辅导费对方01234567890" + ;
        "不明白楼主说的文本内容超长是什么意思,vfp字符型字段最多导入254个字符,共有294个字符"
         
         
 
?LEN(cStr1)
DIMENSION MyAry[4]
 
=CutStr(cStr1,@MyAry,4,99)
?MyAry[1]
?MyAry[2]
?MyAry[3]
?MyAry[4]
 
FUNCTION CutStr(cStr,aMyAry,nAry,nMaxLen)
LOCAL cStr1,nLen,nLen1,nStart,i
 nLen = LEN(cStr)
 IF nMaxLen * nAry < nLen &&不够长度
    RETURN .f.
 ELSE
 nStart = 1
 FOR i=1 TO nAry
     cStr1 = SUBSTRC(SUBSTR(cStr,nStart,nMaxLen),1,nMaxLen)  &&这句是最主要的.
     nLen1 = LEN(cStr1)
     nStart = nStart + nLen1
     aMyAry[i] = cStr1
     nLen = nLen - nLen1
 ENDFOR  
 RETURN Iif(nLen = 0,.t.,.f.) && 正常情况,最后 nLen=0
 ENDIF
ENDFUNC  


[此贴子已经被作者于2018-4-11 21:08编辑过]

2018-04-11 17:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
结尾为C的函数安全性得不到保证。如:SUBSTRC()

坚守VFP最后的阵地
2018-04-11 18:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 11楼 mywisdom88
这样应该也可以:SUBSTRC(SUBSTR(cStr,nStart,nLen),1)
Str1 = "人发可个方和方经品他三方登1山泛水多福多寿辅导费对方01234567890"
nStart = 1
nLen = 10
DO WHILE nStart<=LEN(str1) AND nLen>1
    ? CutStr(str1, @nStart, nLen)
ENDDO

FUNCTION CutStr(cStr, nStart, nLen)
    LOCAL cRet
    cRet = SUBSTRC(SUBSTR(cStr, nStart, nLen), 1)
    nStart = nStart + LEN(cRet)
    RETURN cRet
ENDFUNC
2018-04-11 21:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:20 
=ALINES(aa,FILETOSTR("测试.txt"))
CREATE CURSOR tt (列1 c(234),列2 c(99),列3 m)
FOR i=1 TO ALEN(aa,1)
    INSERT INTO tt VALUES (SUBSTR(aa[i],1,234),SUBSTR(aa[i],235,99),SUBSTR(aa[i],334))
ENDFOR
BROWSE

坚守VFP最后的阵地
2018-04-11 22:37
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
每行内容超过800字节

坚守VFP最后的阵地
2018-04-11 22:45
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
cStr1 = "把一串截为3段,如果含有不定长双字节字符就不能随便截断, 既然用到备注字段,为何还要截断来保存?先把文本导" + ;
        "入到备注字段,在按长度分别导出这三个字段内容,能行不?真可以,人发可个方和方经品他三方登山泛水多福多寿辅" + ;
        "导费对方,不明白楼主说的文本内容超长是什么意思,vfp字符型字段最多导入254个字符,共有300个字符0123456789"

cStr2 = "把一串截为3段,如果含有不定长双字节字符就不能随便截断, 既然用到备注字段,为何还要截断来保存?先把文本0导" + ;
        "入到备注字段,在按长度分别导出这三个字段内容,能行不?真可以,人发可个方和方经品他三方登山泛水多福多寿辅" + ;
        "导费对方,不明白楼主说的文本内容超长是什么意思,vfp字符型字段最多导入254个字符,共有300个字符123456789"
         
 ** cStr1刚好是每行100个字符,测试结构完全正确的. 返回 .t.
 ** cStr2第1行是101,第2行是100,第3行是99,分段结果是不正确的,所以返回 .f.,针对这个情况,把每行设置为 每行nMaxLen * 行数nAry - 行数nAry > 字符数,就完整正确
 ** 也就是说,根据返回值,如果是 .T.的,就正确
 ?LEN(cStr1)
 DIMENSION MyAry[4]
  
 ?CutStr(cStr1,@MyAry,3,100)
 ?MyAry[1]
 ?MyAry[2]
 ?MyAry[3]

  
 FUNCTION CutStr(cStr,aMyAry,nAry,nMaxLen)
 LOCAL cStr1,nLen,nLen1,nStart,i
  nLen = LEN(cStr)
  IF nMaxLen * nAry < nLen &&不够长度
    RETURN .f.
  ELSE
  nStart = 1
  FOR i=1 TO nAry
      cStr1 = SUBSTRC(SUBSTR(cStr,nStart,nMaxLen),1)  &&这句是最主要的.
      nLen1 = LEN(cStr1)
      nStart = nStart + nLen1
      aMyAry[i] = cStr1
      nLen = nLen - nLen1
  ENDFOR  
  RETURN Iif(nLen = 0,.t.,.f.) && 正常情况,最后 nLen=0
  ENDIF
 ENDFUNC

[此贴子已经被作者于2018-4-12 09:11编辑过]

2018-04-12 09:07
lnsyzhuhua
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2017-8-16
收藏
得分:0 
回复 10楼 吹水佬
帮看下,是否可行?
备注字段的文本导入.zip (1.45 KB)
有需改动的地方没?
2018-04-12 10:42
lnsyzhuhua
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2017-8-16
收藏
得分:0 
回复 16楼 mywisdom88
这个是平均截取的? 按
,1,234)
,235,100)
,335)  呢?
2018-04-12 12:53
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
*按你指定的长度,如果你3段的长度不一样的话,你就这样吧.

cStr="按你指定的长度,如果你3段的长度不一样的话,你就这样吧"
local nLen,nLen1,nLen2,nLen3,cStr1,cStr2,cStr3,nStart
nLen1 = 15
nLen2 = 26
nLen3 = 10
nStart = 1
cStr1 = SUBSTRC(SUBSTR(cStr,nStart,nLen1),1)
nStart = nStart + LEN(cStr1)
cStr2 = SUBSTRC(SUBSTR(cStr,nStart,nLen2),1)
nStart = nStart + LEN(cStr2)
cStr3 = SUBSTRC(SUBSTR(cStr,nStart,nLen3),1)

?cStr1
?cStr2
?cStr3
2018-04-12 13:33
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lnsyzhuhua在2018-4-12 12:53:31的发言:

这个是平均截取的? 按
,1,234)
,235,100)
,335)  呢?

15楼的代码看了吗

坚守VFP最后的阵地
2018-04-12 18:30
快速回复:文本内容超长,导入的问题
数据加载中...
 
   



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

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