标题:标点符号函数简化问题
只看楼主
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用qczx3358在2014-3-2 14:48:05的发言:

如果把备注字段打印出来,一整段,直接打印备注字段,有的时候行间距不好控制,那么把备注字段分成不同的行,把每行要打印内容重新存储为字符型字段,然后字符型字段放入报表中,行间距就可以按需要调整了。
但是分行的时候,如果行首是标点符号就不美观了。
这是我要表达的意思。
字体的大小对标点符号的位置有一定的影响,你在备注字段中调整标点符号的位置有什么用,现用现调整。

坚守VFP最后的阵地
2014-03-02 14:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
要實現樓主所希望的功能,其實不難,但正如樓上說的,這個好像沒多大實用價值啊。要百分百完美是不可能的,麻煩在於做到後來,付出與回報將越來越不成比例,而做不完美,等於白做。Word的中文排版,實際上也不完美,WPS的也差不多。

[ 本帖最后由 TonyDeng 于 2014-3-3 20:21 编辑 ]

授人以渔,不授人以鱼。
2014-03-03 20:20
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:0 
*!* 校验行首是否为中文标点符号(包括","。"》"三种),如果是则把标点符号删掉在它前一行尾增加此标点符号
*!* 用法bdfh(首行变量,下一行变量,1或2),如果是1则返回首行,2则返回第二行
*!*    如bdfh(a1,b1,1)则返回a1值,bdfh(a1,b1,2)则返回b1值
FUNCTION bdfh
  PARAMETERS sbdfhtmp,wbdfhtmp,bdfhtmp
  IF TYPE("sbdfhtmp")#"C" OR TYPE("wbdfhtmp")#"C" OR TYPE("bdfhtmp")#"N"
    RETURN ""
  ENDIF
  cCode=SUBSTRC(wbdfhtmp,1,1)
  DO WHILE cCode$",》。、?!;:”"
    sbdfhtmp=sbdfhtmp-cCode
    wbdfhtmp=SUBSTRC(wbdfhtmp,2)
  ENDDO
  RETURN IIF(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
ENDFUNC

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2014-03-04 09:53
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:0 
*!* 校验行首是否为中文标点符号(包括","。"》"三种),如果是则把标点符号删掉在它前一行尾增加此标点符号
*!* 用法bdfh(首行变量,下一行变量,1或2),如果是1则返回首行,2则返回第二行
*!*    如bdfh(a1,b1,1)则返回a1值,bdfh(a1,b1,2)则返回b1值
FUNCTION bdfh
  PARAMETERS sbdfhtmp,wbdfhtmp,bdfhtmp
  IF TYPE("sbdfhtmp")#"C" OR TYPE("wbdfhtmp")#"C" OR TYPE("bdfhtmp")#"N"
    RETURN ""
  ENDIF
  cCode=SUBSTRC(wbdfhtmp,1,1)
  DO WHILE cCode$",》。、?!;:”"+",.?!:;"&&考虑到部分单字节标点符号
    sbdfhtmp=sbdfhtmp-cCode
    wbdfhtmp=SUBSTRC(wbdfhtmp,2)
  ENDDO
  RETURN IIF(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
ENDFUNC
收到的鲜花
  • qczx33582014-03-04 20:57 送鲜花  5朵   附言:我很赞同

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2014-03-04 09:56
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
我有更好的思路:将备注文件的内容整体导出到WORD文件中,因为WORD具有处理行尾标点符号的功能。

泉城飞狐
2014-03-04 13:52
qczx3358
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2014-1-19
得分:0 
以下是引用Tiger5392在2014-3-4 09:56:22的发言:

*!* 校验行首是否为中文标点符号(包括","。"》"三种),如果是则把标点符号删掉在它前一行尾增加此标点符号
*!* 用法bdfh(首行变量,下一行变量,1或2),如果是1则返回首行,2则返回第二行
*!*    如bdfh(a1,b1,1)则返回a1值,bdfh(a1,b1,2)则返回b1值
FUNCTION bdfh
  PARAMETERS sbdfhtmp,wbdfhtmp,bdfhtmp
  IF TYPE("sbdfhtmp")#"C" OR TYPE("wbdfhtmp")#"C" OR TYPE("bdfhtmp")#"N"
    RETURN ""
  ENDIF
  cCode=SUBSTRC(wbdfhtmp,1,1)
  DO WHILE cCode$",》。、?!;:”"+",.?!:;"&&考虑到部分单字节标点符号
    sbdfhtmp=sbdfhtmp-cCode
    wbdfhtmp=SUBSTRC(wbdfhtmp,2)
  ENDDO
  RETURN IIF(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
ENDFUNC

我用这段代码,计算机就不响应了。

程序代码:
*!* 校验行首是否为中文标点符号(包括","。"》"三种),如果是则把标点符号删掉在它前一行尾增加此标点符号
*!* 用法bdfh(首行变量,下一行变量,1或2),如果是1则返回首行,2则返回第二行
*!* 如bdfh(a1,b1,1)则返回a1值,bdfh(a1,b1,2)则返回b1值
Function bdfh
Parameters sbdfhtmp,wbdfhtmp,bdfhtmp
If Type("sbdfhtmp")#"C" Or Type("wbdfhtmp")#"C" Or Type("bdfhtmp")#"N"
    Return ""
Endif
cCode=Substrc(wbdfhtmp,1,1)
IF cCode$",》。、?!;:”"+",.?!:;"&&考虑到部分单字节标点符号
    sbdfhtmp=sbdfhtmp-cCode
    wbdfhtmp=Substrc(wbdfhtmp,2)
ENDIF
Return Iif(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
Endfunc

把do while改成if就正常用了。
2014-03-04 20:56
qczx3358
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2014-1-19
得分:0 
回复 14楼 Tiger5392
非常感谢!
2014-03-04 20:57
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:0 
其实用do while ... enddo语句,是为了防止如下类似的东西存在
第一行:    我看过一本书《潜水员是如何练成的
第二行:?》。该书写的是一个人如何成为优秀的
第三行:潜水员。
其中第二行应该将三个双字节往上一行移动才行。
程序出了点问题,修改如下

FUNCTION bdfh
  PARAMETERS sbdfhtmp,wbdfhtmp,bdfhtmp
  IF TYPE("sbdfhtmp")#"C" OR TYPE("wbdfhtmp")#"C" OR TYPE("bdfhtmp")#"N"
    RETURN ""
  ENDIF
  DO WHILE SUBSTRC(wbdfhtmp,1,1)$",》。、?!;:”"
    sbdfhtmp=sbdfhtmp-SUBSTRC(wbdfhtmp,1,1)
    wbdfhtmp=SUBSTRC(wbdfhtmp,2)
  ENDDO
  RETURN IIF(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
ENDFUNC

[ 本帖最后由 Tiger5392 于 2014-3-6 10:04 编辑 ]

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2014-03-06 10:01
qczx3358
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2014-1-19
得分:0 
以下是引用Tiger5392在2014-3-6 10:01:42的发言:

其实用do while ... enddo语句,是为了防止如下类似的东西存在
第一行:    我看过一本书《潜水员是如何练成的
第二行:?》。该书写的是一个人如何成为优秀的
第三行:潜水员。
其中第二行应该将三个双字节往上一行移动才行。
程序出了点问题,修改如下
FUNCTION bdfh
  PARAMETERS sbdfhtmp,wbdfhtmp,bdfhtmp
  IF TYPE("sbdfhtmp")#"C" OR TYPE("wbdfhtmp")#"C" OR TYPE("bdfhtmp")#"N"
    RETURN ""
  ENDIF
  DO WHILE SUBSTRC(wbdfhtmp,1,1)$",》。、?!;:”"
    sbdfhtmp=sbdfhtmp-SUBSTRC(wbdfhtmp,1,1)
    wbdfhtmp=SUBSTRC(wbdfhtmp,2)
  ENDDO
  RETURN IIF(bdfhtmp=1,sbdfhtmp,wbdfhtmp)
ENDFUNC

非常感谢你噢。。
2014-03-07 11:25



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




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

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