| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 942 人关注过本帖
标题:[求助]关于字符串中的数字
只看楼主 加入收藏
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
 问题点数:0 回复次数:13 
[求助]关于字符串中的数字
我想将“>270-520”字符串中的270和520取出来执行(270+520)/2的计算。但我不知道如何将它们提取出来。这些字符串还有“>=0.09”、“>650”、“3~25”、“0.01~0.9”等。请各位大虾指点,最好有代码!在下谢了!
搜索更多相关主题的帖子: 数字 字符 
2006-08-22 22:43
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
好像你的字符串没啥规律,只能用字串截取函数来逐个取。

我的msn: myfend@
2006-08-23 09:37
syh878
Rank: 1
等 级:新手上路
威 望:2
帖 子:461
专家分:0
注 册:2005-9-2
收藏
得分:0 
Private Function NumStr(ByVal Str As String)
Dim TempStr$
Dim NextNum As Integer
For i = 1 To Len(Str)
If IsNumeric(Mid(Str, i, 1)) Then
TempStr = TempStr & Mid(Str, i, 1)
If Not IsNumeric(Mid(Str, i + 1, 1)) Then TempStr = TempStr & ","
End If
Next
NumStr = TempStr
End Function
返回字符中的所有数字用","隔开,用的时候用split分开就行了.

2006-08-23 09:39
syh878
Rank: 1
等 级:新手上路
威 望:2
帖 子:461
专家分:0
注 册:2005-9-2
收藏
得分:0 

小数就是加个第一次遇见"."的判断


2006-08-23 09:40
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

Val 函數不是很好用嗎?


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-23 09:45
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 

果然有高人!非常感谢syh878,你的方法比我的简单简单多了。我在你的基础上将判断小数点的代码改为:
Option Explicit

Private Sub Command1_Click()
Dim A As String

A = Text1
A = NumStr(A)
Text1 = A

End Sub


Private Function NumStr(ByVal Str As String)
Dim TempStr$
Dim NextNum As Integer
Dim i As Integer

For i = 1 To Len(Str)
If IsNumeric(Mid(Str, i, 1)) Or Mid(Str, i, 1) = "." Then
TempStr = TempStr & Mid(Str, i, 1)

If Not IsNumeric(Mid(Str, i + 1, 1)) And Mid(Str, i, 1) <> "." Then
TempStr = TempStr & ","

End If

End If
Next

NumStr = TempStr

End Function


2006-08-23 13:03
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 

同时,请大家帮我改一下我自己编的代码:
Option Explicit

Private N() As String '''''存储提取的值
Private k As Integer '''''组数

Private U As Integer '''''Text1数组Index的上边界值


Private Sub Command1_Click()
Dim A As String
Dim i As Integer

On Error GoTo ProcError

A = Text1(0).Text
Me.GetNumber (A)

For i = 1 To k
Text1(i) = N(i)

Next

For i = k + 1 To U
Text1(i) = ""

Next

If U > k Then
For i = U To k + 1 Step -1
Unload Text1(i)
Me.Height = Me.Height - (Text1(i - 1).Top - Text1(i - 2).Top)

Next

End If

ProcExit:
Exit Sub

ProcError:
' MsgBox Err.Number & vbCrLf & Err.Description, 48

Select Case Err.Number
Case 340
Dim V As Integer

V = Text1(i - 1).Top - Text1(i - 2).Top

Load Text1(i)
Text1(i).Left = Text1(0).Left
Text1(i).Top = Text1(i - 1).Top + V
Text1(i).Height = Text1(i).Height
Text1(i).Width = Text1(i).Width
Text1(i).Visible = True

U = i

If Me.ScaleHeight <= Text1(i).Top + Text1(i).Height Then
' On Error GoTo ProcError
Me.Height = Me.Height + V

End If
Resume

' Case 384
' Resume Next

Case Else

End Select



End Sub

Public Sub GetNumber( _
ByVal mString As String _
)

Dim i As Integer
Dim L As Integer
Dim G(100) As Integer
Dim P(50) As Integer

Dim Ascii As Integer
Dim Temp As Integer
Dim J As Integer

Dim Start As Integer
Dim mL As Integer

On Error GoTo ProcError

L = Len(mString)
J = 0
k = 0

For i = 1 To L
Ascii = Asc(Mid$(mString, i, 1))

If Ascii <= 58 And Ascii >= 48 Then

''''记录每个数字的位置''''''''''''

J = J + 1
G(J) = i

End If

Next

''''''''(1)如果没有数字''''''''

If J = 0 Then
k = 0
GoTo ProcExit

End If

''''''''(2)如果只有一个数字''''''''

If J = 1 Then
k = 1
ReDim N(k)

N(k) = Mid$(mString, G(1), 1)

GoTo ProcExit

End If

''''''''(3)如果有>=2个数字''''''''
'''''''''(3-1)检查数字之间是否相连,是否为一组数字'''''''''

Dim IfOne As Boolean

IfOne = True

For i = 2 To J
Temp = G(i) - G(i - 1)
If Temp <> 1 Then
k = k + 1
IfOne = False
Exit For

End If

Next

If IfOne = True Then
k = 1

ReDim N(1)

mL = G(J) - G(1) + 1
N(1) = Mid$(mString, G(1), mL)
GoTo ProcExit

End If

'''''''''(3-2)说明有>=2组的数字串'''''''''

Dim b As Integer

b = 0
Start = G(1)

For i = 2 To J
Temp = G(i) - G(i - 1)
If Temp > 1 Then
k = k + 1
b = b + 1

P(2 * b - 1) = Start
P(2 * b) = G(i - 1)

Start = G(i)



End If

Next

P(2 * b + 1) = Start
P(2 * b + 2) = G(J)

ReDim N(k)

If k = 1 Then
N(1) = Mid$(mString, P(1), 1)
GoTo ProcExit

Else
For i = 1 To k
mL = P(2 * i) - P(2 * i - 1) + 1
N(i) = Mid$(mString, P(2 * i - 1), mL)

Next

End If

ProcExit:
Exit Sub

ProcError:
MsgBox Err.Number & vbCrLf & Err.Description, 48
Resume ProcExit

End Sub

Private Sub Form_Load()
U = 4

End Sub


2006-08-23 13:06
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 
当然,这个代码运行非常好,只是我嫌它有点罗嗦!

2006-08-23 13:08
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

你們的代碼不知道有沒有考慮了 <bc&H30f679f 這樣字元組的 &H30 這種情況. 或者是 <bcO30f679f. (十六進位與八進位)
還是認爲 Val 函數工作得好一點

具體代碼不寫了,. 大概意思是這樣的
num = Val( Mid (sourcStr, i))

i 是掃描的步長, 每次的增量由 Len(sourceStr) 與 Len(num) 與上次的 i 值進行判斷.

當然要排除 &H 這些情況可以先用 Replace 將 &H 替換爲其他字元.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-23 13:20
syh878
Rank: 1
等 级:新手上路
威 望:2
帖 子:461
专家分:0
注 册:2005-9-2
收藏
得分:0 

用val的话,当字符里无数字时还是返回0这就增加了判断的难度(还要用instr来判断几次).对于这个问题来说出现&O和&H好象是不可能的吧.
如果出现那种情况的话确实应用val来是简单很多.


2006-08-23 17:24
快速回复:[求助]关于字符串中的数字
数据加载中...
 
   



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

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