谁能理解mid()函数——有点难

smileknife 2003-09-02 12:05:35
试试下面的程序
Private Sub Command1_Click()
Dim strtt As String, str1 As String, str2 As String, str3 As String, str4 As String
strtt = " 2 12345.201 23490.703 69.258"
str1 = Mid(strtt, 1, 3)
str2 = Mid(strtt, 4, 10)
str3 = Mid(strtt, 14, 10)
str4 = Mid(strtt, 24, 10)
Print "0123456789"
Print str1
Print str2
Print str3
Print str4
End Sub

我希望得到如下的结果(注意格式)
2
12345.201
23490.703
69.258

请问上面的程序应该如何修改。
strtt = " 2 12345.201 23490.703 69.258"
字符串最前头的空格是否有效的?
...全文
144 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
射天狼 2003-09-02
  • 打赏
  • 举报
回复
读出来的时候用TRIM函数去掉首尾的空格,然后用SPLIT函数,前面我已经写了代码了,看看吧~~
smileknife 2003-09-02
  • 打赏
  • 举报
回复
很对不起,我是楼主,
我的问题好像不是出现上的代码中,而是出现在strtt = " 2 12345.201 23490.703 69.258"本身。我是从文件中读取的字符串,文件的基本格式如下
0 73.125 101.250 84.375
1 72.070 82.266 73.828
2 12345.201 23490.703 69.258
………………………………………………
10 86.484 120.586 14.766
100 41.133 58.711 103.008
我是这样读的
Open intervalfile For Input As #2 Len = 64
Do While Not EOF(2)
Input #2, strtt
…………
当读数据时,好像每行最前面的空格并不当作字符处理,请问是不是这样的?
入第三行读出来的是
2 12345.201 23490.703 69.258
而不是我想要的
2 12345.201 23490.703 69.258
各位大侠到底是不是这样的呢?


yo_jo 2003-09-02
  • 打赏
  • 举报
回复
Split 函数 语言参考
起始页 | 版本 2


请参阅


--------------------------------------------------------------------------------

描述
返回基于 0 的一维数组,其中包含指定数目的子字符串。
语法
Split(expression[, delimiter[, count[, start]]])
Split 函数的语法有以下参数:

参数 描述
expression 必选。字符串表达式,包含子字符串和分隔符。如果 expression 为零长度字符串,Split 返回空数组,即不包含元素和数据的数组。
delimiter 可选。用于标识子字符串界限的字符。如果省略,使用空格 ("") 作为分隔符。如果 delimiter 为零长度字符串,则返回包含整个 expression 字符串的单元素数组。
count 可选。被返回的子字符串数目,-1 指示返回所有子字符串。
compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。


设置
compare 参数可以有以下值:
常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。


说明
下面的示例利用 Split 函数从字符串中返回数组。函数对分界符进行文本比较,返回所有的子字符串。
Dim MyString, MyArray
MyString = Split("VBScriptXisXfun!", "x", -1, 1)
' MyString(0) 包含"VBScript"。
' MyString(1) 包含"is"。
' MyString(2) 包含 "fun!"。
---------------------------------------------------------------------------------
是个好东西
onebody 2003-09-02
  • 打赏
  • 举报
回复
UP
射天狼 2003-09-02
  • 打赏
  • 举报
回复
返回 Variant (String),其中包含字符串中指定数量的字符。

语法

Mid(string, start[, length])

Mid 函数的语法具有下面的命名参数:

部分 说明
string 必要参数。字符串表达式,从中返回字符。如果 string 包含 Null,将返回 Null。
start 必要参数。为 Long。string 中被取出部分的字符位置。如果 start 超过 string 的字符数,Mid 返回零长度字符串 ("")。
length 可选参数;为 Variant (Long)。要返回的字符数。如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。
说明

欲知 string 的字符数,可用 Len 函数。

注意 MidB 函数作用于字符串中包含的字节数据。因此其参数指定的是字节数,而不是字符数。
射天狼 2003-09-02
  • 打赏
  • 举报
回复
Dim a() As String, strtt As String
Dim i As Long

strtt = "2 12345.201 23490.703 69.258"
a = Split(strtt, " ")
For i = 0 To UBound(a) - 1
MsgBox a(i)
Next
liul17 2003-09-02
  • 打赏
  • 举报
回复
上面那行字是: 将下面代码粘到窗体上即可 (画个commandbutton)
liul17 2003-09-02
  • 打赏
  • 举报
回复
灏嗕笅闈唬鐮佺矘鍒扮獥浣撲笂鍗冲彲锛堢敾涓猚ommandbutton锛? Option Explicit

Private Sub Command1_Click()
Dim strtt As String
Dim arr
Dim i As Long

strtt = " 2 12345.201 23490.703 69.258"

arr = Split(strtt, " ")

For i = 0 To UBound(arr)
Debug.Print arr(i)
Next




End Sub

firechun 2003-09-02
  • 打赏
  • 举报
回复
不明白你要改成什么样,代码没有什么问题

字符串中的空格是有效的,一个空格占一个位置
liul17 2003-09-02
  • 打赏
  • 举报
回复
用 split 函数不就行了吗
schzh 2003-09-02
  • 打赏
  • 举报
回复
保留空格应该这样写:
Private Type RECSTR
NO1 As String * 3 '编码
DATA(2) As String * 10 '三个数据
STRVBCrLf As String * 2 '回车换行
End Type

Private Sub Form_Load()
Dim REC1 As RECSTR
Open intervalfile For Random As #2 Len = Len(REC1)
For I = 1 To LOF(2) / Len(REC1)
Get #2, , REC1
' REC1.NO1为第一个值
' REC1.DATA(0)为第二个值
' REC1.DATA(1)为第二个值
' REC1.DATA(2)为第二个值
Next
End Sub
liul17 2003-09-02
  • 打赏
  • 举报
回复
将上面 Set objTarget = fs.OpenTextFile("C:\abc.txt", ForWriting, True, TristateFalse) 这句删除

将代码粘到窗体中 画个commondialog

再给你个全的
这是个打开文件的函数在Form_load中调一下即可
Sub OpenFile()
'打开文件
Dim fs As New FileSystemObject
Dim ObjText As TextStream
Dim sFileName As String

With cdlFile
.CancelError = True
.FileName = ""
.Filter = "TXT(*.txt)|*.txt"
.DialogTitle = "打开文件"
.ShowOpen
sFileName = .FileName
End With

Set ObjText = fs.OpenTextFile(sFileName, ForReading, True, TristateFalse)
Do

Debug.Print ObjText.ReadLine

Loop Until ObjText.AtEndOfLine


End Sub
liul17 2003-09-02
  • 打赏
  • 举报
回复
Dim fs As New FileSystemObject
Dim ObjText As TextStream

Set ObjText = fs.OpenTextFile(sFileName, ForReading, True, TristateFalse)
Set objTarget = fs.OpenTextFile("C:\abc.txt", ForWriting, True, TristateFalse)
Do

Debug.Print ObjText.ReadLine

Loop Until ObjText.AtEndOfLine
liul17 2003-09-02
  • 打赏
  • 举报
回复
可以使用 filesystem 对象
smileknife 2003-09-02
  • 打赏
  • 举报
回复
问题是我希望保留前面的空格:(

7,789

社区成员

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

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