字符串识别的问题

homebysea 2003-11-04 11:56:23
有这样的一个数组,数组里面的元素如下,其实就是变量和它的取值范围

x1,[10,1000]
x2,[5,10]
......

希望实现的功能:

用 VarLower(i) 和 VarUpper(i) 来获得xi的取值范围,逐个的实现即可。

...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2003-11-04
  • 打赏
  • 举报
回复
假设有文件d:\mc\tt.txt,内容如下
x1,[10,1000]
x2,[5,10]
x3,[12,234]
x4,[345,456]
x5,[111,777]

窗体上两个listbox,一个按钮:
Option Explicit

Private Sub Command1_Click()
Dim filename As String
Dim l As Long
filename = "d:\mc\tt.txt"
l = FileLen(filename)
Dim buff() As Byte
ReDim buff(l - 1)
Open filename For Binary As #1
Get #1, , buff
Close #1
Dim s As String
s = StrConv(buff, vbUnicode)
s = Replace(s, "[", "")
s = Replace(s, "]", "")
Dim arr, arrtemp
arr = Split(s, vbCrLf)
Dim i As Long, k As Long
Dim VarLower() As Long
Dim VarUpper() As Long
k = 0
For i = 0 To UBound(arr)
If Len(arr(i)) <> 0 Then
arrtemp = Split(arr(i), ",")
If UBound(arrtemp) = 2 Then
ReDim Preserve VarUpper(k)
VarUpper(k) = CLng(Trim(arrtemp(2)))
ReDim Preserve VarLower(k)
VarLower(k) = CLng(Trim(arrtemp(1)))
k = k + 1
End If
End If
Next
List1.Clear
List2.Clear
For i = 0 To UBound(VarLower)
List1.AddItem CStr(VarLower(i))
List2.AddItem CStr(VarUpper(i))
Next
End Sub
homebysea 2003-11-04
  • 打赏
  • 举报
回复
谢谢 TechnoFantasy(www.applevb.com) 的解答,我大概明白了怎么实现了

写成 x1,10,1000

然后就可以直接识别了

去吃饭了,下午结账。

homebysea 2003-11-04
  • 打赏
  • 举报
回复
楼上可能理解错了,我希望得到的是

VarLower(1)=10 ,VarUpper(1)=1000
VarLower(2)=5 ,VarUpper(2)=10
...

因为我是从记事本读入数据,接着识别,得到每一个变量的取值上下限
然后再用随机函数得到每一个变量的随机取值


TechnoFantasy 2003-11-04
  • 打赏
  • 举报
回复
Split函数

描述

返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

语法

Split(expression[, delimiter[, count[, compare]]])

Split函数语法有如下几部分:

部分 描述
expression 必需的。包含子字符串和分隔符的字符串表达式 。如果expression
是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter 可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空
格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包
含一个元素,即完整的 expression字符串。
count 可选的。要返回的子字符串数,-1表示返回所有的子字符串。
compare 可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请
参阅“设置值”部分。


设置值

compare参数的设置值如下:

常数 值 描述
vbUseCompareOption -1 用Option Compare语句中的设置值执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文字比较。
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比
较。
TechnoFantasy 2003-11-04
  • 打赏
  • 举报
回复
用split函数:

用法:传回数组 = Split(原始字串, 要找的字串, 拆成几个数组)
Private Sub Command1_Click()
Dim MyStr As String
MyStr = "1234567123456712345"
MyStrs = Split(MyStr, "67")
For Each Strs In MyStrs
Print Strs
Next
End Sub
●输出结果:"12345"、"12345"、"12345"
 

Private Sub Command1_Click()
Dim MyStr As String
MyStr = "1234567123456712345"
MyStrs = Split(MyStr, "67", 2)
For Each Strs In MyStrs
Print Strs
Next
End Sub
●输出结果:"12345"、"123456712345"
Dennis618 2003-11-04
  • 打赏
  • 举报
回复
数组里面的是数值型吗?
dim Low as Integer
dim Big as integer
for i=0 to 10
for j=0 to 1000
if x1(i,j)<Low then Low=x1(i,j)
if x1(i,j)>Big then Big=x1(i,j)
next
next
范围为 x1>=Low x1<=Big
demo001 2003-11-04
  • 打赏
  • 举报
回复
楼上的代码不错啊

不过楼主的意思好像是生成一个数组就行了

借用楼上的代码一下


ReDim Preserve VarUpper(k)
VarUpper(k) = CLng(Trim(arrtemp(2)))
ReDim Preserve VarLower(k)
VarLower(k) = CLng(Trim(arrtemp(1)))

下面加一句
X(k)=rnd*(VarUpper(k)-VarLower(k))+VarLower(k)

X()数组应该就是楼主想要的了吧




7,732

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧