找回密码
 加入
搜索
查看: 4454|回复: 8

[效率算法] [已解决]字符串操作,读取字符最后一个'\'之前的全部字符,看还有没有别的办法

  [复制链接]
发表于 2010-11-17 01:39:40 | 显示全部楼层 |阅读模式
本帖最后由 天堂泪吻泪 于 2010-11-18 20:39 编辑


搜索到在下都快头晕了,但还是找不到好的办法
就是想读取'\'之前的全部字符串,最后一个'\'不存在都行
结果为 'A:\B\C\' 或者 'A:\B\C' 都行
在下资质愚钝,还请大家指教!
在下用的代码如下:

Dim $str1, $str2
Dim $aStr
Dim $n1,$n2
$str1 = 'A:\B\C\D.EFG'
$aStr = StringSplit($str1, '\')
$n1=StringLen($aStr[$aStr[0]])
$n2=StringLen($str1)
$str2=StringLeft($str1,$n2-$n1)
MsgBox(0, '', $str2)

思路就是以'\'拆分成数组,再读取最后一个数组'D.EFG'的字符长度,再用$str1的长度减去'D.EFG'的长度

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-11-17 02:21:17 | 显示全部楼层
Local $Str = 'A:\B\C\D.EFG'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '(.+)\\[^\\]*$', '$1')
MsgBox(0, '替换结果', $Test)

评分

参与人数 1金钱 +20 收起 理由
天堂泪吻泪 + 20 正则,不怎么会!!

查看全部评分

发表于 2010-11-17 02:21:21 | 显示全部楼层
用正则:
$str = 'A:\B\C\D.EFG'
$str = StringRegExpReplace($str,'(.+\\).*','$1')
msgbox(0,'',$str)

评分

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

查看全部评分

发表于 2010-11-17 02:28:39 | 显示全部楼层
本帖最后由 kxing 于 2010-11-17 02:35 编辑

不会正则的话也可以用 stringinstr 和 stringleft 搭配使用。
Local $Str = 'A:\B\C\D.EFG'
$Str = StringLeft($Str,StringInStr($Str,'\',2,-1))
MsgBox(0,'',$Str)

评分

参与人数 1金钱 +20 收起 理由
天堂泪吻泪 + 20 谢谢了,这个方法对于我来说挺实用的!

查看全部评分

发表于 2010-11-17 02:30:49 | 显示全部楼层
给afan大抢先了!!!
发表于 2010-11-17 10:24:02 | 显示全部楼层
_WinAPI_PathFindNextComponent
发表于 2010-11-17 13:20:37 | 显示全部楼层
想给你回下,这么多人占座呀,我刚需要的是最后一个\后面的字符,呵呵.....

我用的是四楼的方法,不会正则.
发表于 2010-11-17 15:40:12 | 显示全部楼层
#Include <WinAPIEx.au3>
$a = _WinAPI_PathFindFileName(  'A:\B\C\D.EFG')
msgbox(0,"短文件名", $a)
 楼主| 发表于 2010-11-18 21:01:46 | 显示全部楼层
方法多样啊,谢谢大家了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 07:43 , Processed in 0.095316 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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