乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 76|回复: 4

基于特定顺序对字符串进行排序

[复制链接]

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2006-5-5 18:24:04 | 显示全部楼层 |阅读模式
很抱歉,如果已经这样做了,但我找不到它。
我正在尝试做的是根据设置的顺序对字符串进行排序。我正在做的是为电槽中的内容对行“文本”值进行排序。该例程使用交叉窗口抓取所有行,过滤层名称,并根据找到的层创建一串字母。问题是字符串是基于创建的顺序。我的字符串字母是P(主管道)、S(辅助)、L(照明电路)和CATV的X。根据创建顺序,典型的字符串可能看起来像PSSXPLPS。我正在尝试将其排序为看起来像PPPSSSLX。我正在尝试使用INSTR、MID、LEFT和右侧来操作我的字符串。
我的想法是使用while语句(或do while)检查“P”是否为INSTR,并使用返回的位置为MID函数提供信息以提取字母并创建一个我将附加每个字母的新字符串。然后使用左和右将字符串连接在一起减去我们刚刚删除的“P”。然后是S、L和X。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-5-5 18:24:24 | 显示全部楼层
哼....
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-5-5 18:28:26 | 显示全部楼层
更好的是:
  1. Function testCmdrDuh(str2test As String, strPattern As String) As String
  2. Dim strFinal As String
  3. Dim I As Integer
  4. Dim strPat As String
  5. Do Until strPattern = ""
  6.     strPat = Left(strPattern, 1)
  7.     I = InStr(1, str2test, strPat)
  8.     Do Until I = 0
  9.         strFinal = strFinal & Mid(str2test, I, 1)
  10.         str2test = Replace(str2test, strPat, "", 1, 1)
  11.         I = InStr(1, str2test, strPat)
  12.     Loop
  13.     strPattern = Replace(strPattern, strPat, "", 1, 1)
  14. Loop
  15. testCmdrDuh = strFinal
  16. End Function
  17. Sub test()
  18. Debug.Print testCmdrDuh("PSSXPLPS", "PSLX")
  19. End Sub

回复

使用道具 举报

6

主题

94

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2006-5-5 19:13:38 | 显示全部楼层
解决这个问题的另一种方法。
  1. 'variation that preserves the rough data in str2test an uses 1 loop only per pattern
  2. 'thus speed things up for larger amounts of data.
  3. Function testCmdrDuh(ByVal str2test As String, ByVal strPattern As String) As String
  4. Dim strFinal As String
  5. Dim PatternCounter As Long
  6. Dim PatternCharNum As Long
  7. Dim strPat As String
  8. PatternCounter = 1
  9. For PatternCounter = 1 To Len(strPattern)
  10.     strPat = Mid$(strPattern, PatternCounter, 1)
  11.     PatternCharNum = Len(str2test)
  12.     str2test = Replace(str2test, strPat, "")
  13.     strFinal = strFinal & String$(PatternCharNum - Len(str2test), strPat)
  14. Next
  15. testCmdrDuh = strFinal
  16. End Function
  17. Sub test()
  18. Debug.Print testCmdrDuh("PSSXPLPS", "PSLX")
  19. End Sub

回复

使用道具 举报

6

主题

94

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2006-5-5 20:22:59 | 显示全部楼层
谢谢伙计们。我不知道替换功能。更多的阅读要做。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 17:53 , Processed in 1.049190 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表