找回密码
 加入
搜索
查看: 8829|回复: 15

[系统综合] 如何去掉字符转末尾的空格(已解决)

 火.. [复制链接]
发表于 2010-5-6 12:13:31 | 显示全部楼层 |阅读模式
本帖最后由 xg911335 于 2010-5-14 13:18 编辑

比如下面字符串末尾(也就是/后面)有很多空格符,怎么去掉后面多余的空格符呢?
$dfahsadkj#&^#@fhakjdf/
发表于 2010-5-6 12:20:22 | 显示全部楼层
StringStripWS ( "字符串", 2)
 楼主| 发表于 2010-5-6 12:28:35 | 显示全部楼层
StringStripWS 无法删除。不知道是空格符还是什么符号。怎么看它是什么符?
 楼主| 发表于 2010-5-6 12:36:27 | 显示全部楼层
(          )括号中的是空格符还是什么?
发表于 2010-5-6 12:42:40 | 显示全部楼层
那就用字符串处理吧,
Dim str = "$dfahsadkj#&^#@fhakjdf/    "
StringLeft(str ,StringInStr(str,'/'))  返回字符串
发表于 2010-5-6 12:51:36 | 显示全部楼层
只能上传测试文本,贴出来就变了。
猜测:
StringRegExpReplace('字符串', '(\s|\t)+$', '')
 楼主| 发表于 2010-5-6 12:54:21 | 显示全部楼层
最后一个字符是呈变化的。不是固定的。但长度却是固定的。可以用StringLeft 重左边开始返回。但怕万一字符长度出现变化又要改代码。请问一下还有更好的方法吗?
发表于 2010-5-6 13:03:33 | 显示全部楼层
不知道内容只能猜……
最后一个字符是呈变化的?
但长度却是固定的...但怕万一字符长度出现变化??
矛盾得很
发表于 2010-5-6 13:24:22 | 显示全部楼层
针对你的问题只能华丽的告诉你,2楼正解。
 楼主| 发表于 2010-5-6 13:35:18 | 显示全部楼层
8楼我打个比方
$dfahsadkj#&^#@fhakjdf/   后面是空格
$fgghgfhkj$###^%32453    后面是空格
#dfgergerkj#&^#@fhakjd.   后面是空格
上面字符长度是一样的,但字符串最后个字符是变化的。如("/" "3" ".") 如果用StringLeft重左边开始读取字符,StringLeft("字符串",24) 的数量是24。万一字符串变长了那么读取不完整,短了又出错。
最好是删除字符串后面的空格读取该行。那就不存在这些问题了。StringStripWS怎么也 删除不掉。郁闷。
发表于 2010-5-6 13:45:33 | 显示全部楼层
Local $str[3],$ws
$str[0]="$dfahsadkj#&^#@fhakjdf/   "
$str[1]="$fgghgfhkj$###^%32453    "
$str[2]="#dfgergerkj#&^#@fhakjd.             "
For $i=0 To UBound($str)-1
        $ws&=StringStripWS($str[$i],2)&@CRLF
Next
MsgBox(0,0,$ws)
发表于 2010-5-6 14:24:57 | 显示全部楼层
StringStripWS()

StringRegExpReplace()

这些函数都不是直接操作原字符串,而是返回修改后的结果,你不会以为是修改了原字符串吧?
另,如果你不确定最后的是不是空格,那就上传一个文本范本,不会不知道如何上传吧。
发表于 2010-5-6 19:48:18 | 显示全部楼层
本帖最后由 shqf 于 2010-5-6 19:52 编辑

标准空格符的ASCII码 是32,即 Chr(32) 。StringStripWS()函数可以删去字符串中的所有"空白符". 据帮助文档,所谓空白符是指空字符串 Chr(0) 和标准空格符 Chr(32), 还包括从 Chr(9) 到 Chr(13)间的 5 个特殊字符,具体为水平制表符,   换行符,   垂直制表符,   进纸符以及回车符。所以,如果真象楼主所说的是“空格符”的话,StringStripWS()函数是完全可能达到目的的,2 楼肯定是正解(除非StringStripWS()函数存在 BUG)。ASCII 码从0-32为控制字符(一般在文档中不可见,就象空格一样),从33-127位为可打印字符(可见)。从128-255是扩展的ASCII编码。
    估计楼主所说的字符串中所含的是其他“空白符”,既然前面的字符个数不定,能否从左开始一个一个字符地读取,并判断其ASCII码值,一旦其ASCII码值不在可打印字符范围内,就结束截取,返回所要字符串。这仅是个思路,如何实现还未试过,不知技术上可行否?

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-5-6 20:14:52 | 显示全部楼层
本帖最后由 shqf 于 2010-5-6 20:17 编辑

看了一下帮助文档,试编如下,楼主试试,行否?
#include <Array.au3>
Local $Var = "$dfahsadkj#&^#@fhakjdf/  "
Local $VarArray = StringToASCIIArray($Var)
For $i = 0 To UBound($VarArray) - 1
        If $VarArray[$i] < 33 Or $VarArray[$i] > 127 Then ExitLoop
Next
MsgBox(0, "", StringLeft($Var, $i))
发表于 2010-5-6 22:47:00 | 显示全部楼层
本帖最后由 netegg 于 2010-5-6 22:49 编辑

Dim $a= "a                 "
MsgBox('','', StringLen($a) & @CRLF & StringLen(StringReplace($a, ' ', '')) )
如果字符串前面的部分里也含有空格的话不适用
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 10:44 , Processed in 0.129700 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表