Dim TextLine Open "TESTFILE" For Input As #1 ' 打开文件。 Do While Not EOF(1) ' 循环至文件尾。 Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。 Debug.Print TextLine ' 在立即窗口中显示数据。 Loop Close #1 ' 关闭文件。
请问bucher兄,难道不是定义的一个结构,line input就不行了吗?我真的不明白!
大家请看,现在我把代码改写成这样依然无法读出txt中的字符窜!: Public Function loadline(fnamea As String, mon As String, tue As String, _ wed As String, thu As String, fri As String, sat As String, sun As String, _ pdefault As String, runon As String, daten As String) As Boolean Dim kg(8) As String Dim i As Integer i = 0 On Error GoTo errorhandler Open App.Path + "\script.txt" For Input As #1 Do Until EOF(1) Line Input #1, kg(i) i = i + 1 Loop Debug.Print kg(8) tue = kg(0) wed = kg(1) thu = kg(2) fri = kg(3) sat = kg(4) sun = kg(5) pdefault = kg(6) runon = kg(7) daten = kg(8) errorhandler: On Error Resume Next Close #1 End Function 我真是想破了头皮都不得其解,各位帮帮我!各位帮帮我!各位帮帮我! 各位帮帮我!各位帮帮我!各位帮帮我!
classmodule Command2(0) Command2(1) Command2(2) Command1(0) Command1(1) Command1(2) Command1(3) txt Frame1 List1 Label1 Frame2Option ExplicitPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) 'SendMessage函数用法见《visual basic 与 windows API 讲座》148页Const EM_GETLINECOUNT = &HBA '计算text的总行数Const EM_GETLINE = &HC4 '读取text一行的字符串Const EM_LINEINDEX = &HBB '读取某一行第一个字符在text中的索引Const EM_LINELENGTH = &HC1 '读取某一字符所在的行的字符数Const EM_SCROLL = &HB5 '以行或页为单位卷动text,具体可以设置成以下值 Const SB_LINEUP = 0 '上卷一行Const SB_LINEDOWN = 1 '下卷一行Const SB_PAGEDOWN = 3 '下翻一页Const SB_PAGEUP = 2 '上翻一页Public Sub TextBoxScroll(txt As TextBox, SetScroll As Integer) '参数1:textbox的hwnd '参数2:textbox要执行的动作 Select Case SetScroll Case 0 '上卷一行 SendMessage txt.hwnd, EM_SCROLL, SB_LINEUP, ByVal 0& Case 1 '下卷一行 SendMessage txt.hwnd, EM_SCROLL, SB_LINEDOWN, ByVal 0& Case 2 '上翻一页 SendMessage txt.hwnd, EM_SCROLL, SB_PAGEUP, ByVal 0& Case 3 '下翻一页 SendMessage txt.hwnd, EM_SCROLL, SB_PAGEDOWN, ByVal 0& End Select End SubPublic Function TextBoxLineCount(txt As TextBox) As Long '返回text的总行数 '参数:textbox的hwnd TextBoxLineCount = SendMessage(txt.hwnd, EM_GETLINECOUNT, 0, ByVal 0&) End FunctionPublic Function GetTextBoxIndex(txt As TextBox, GetLine As Long) As Long '返回某一行第一个字符在text中的索引 '参数1:textbox的hwnd '参数2:要读取的行 GetTextBoxIndex = SendMessage(txt.hwnd, EM_LINEINDEX, GetLine, ByVal 0&) End FunctionPublic Function GetLineCharCount(txt As TextBox, GetTextBoxIndex As Long) As Long '读取某一行的字符个数 '参数1:textbox的hwnd '参数2:要读取的行在text中的索引 GetLineCharCount = SendMessage(txt.hwnd, EM_LINELENGTH, GetTextBoxIndex, ByVal 0&) End FunctionPublic Function GetLineChar(txt As TextBox, GetTextBoxIndex As Long) As String '读取某一行的字符 '参数1:textbox的hwnd '参数2:要读取的行在text中的索引 Dim s As String Dim Length As Long '文本的长度 Length = SendMessage(txt.hwnd, EM_LINELENGTH, GetTextBoxIndex, ByVal 0&) s = String(Length, Chr(0)) '配置字符串 RtlMoveMemory ByVal s, Length, 2 '填入存储器的长度,必须的 SendMessage txt.hwnd, EM_GETLINE, GetTextBoxIndex, ByVal s GetLineChar = s End Function ============= Option ExplicitPrivate Sub Command1_Click(Index As Integer) Dim txtMessage As txtNewClass Set txtMessage = New txtNewClass txtMessage.TextBoxScroll txt, Index End SubPrivate Sub Command2_Click(Index As Integer) Dim i As Long Dim s As Long Dim GetTextBoxMessage As Long Dim GetTextBoxString As String Dim txtmsg_API As txtNewClass Set txtmsg_API = New txtNewClass s = List1.Text Select Case Index Case 0 i = GetTxtIndex GetTextBoxString = txtmsg_API.GetLineChar(txt, Val(s)) MsgBox "文本框中行号为" & s & ",索引号为" & i & " 的字符串是:" & vbCrLf & GetTextBoxString, vbOKOnly, "获得字符串" Case 1 GetTextBoxMessage = txtmsg_API.TextBoxLineCount(txt) MsgBox "文本框的总行数为" & vbCrLf & GetTextBoxMessage, vbOKOnly, "获得字符的行数" Case 2 i = GetTxtIndex GetTextBoxMessage = txtmsg_API.GetLineCharCount(txt, i) MsgBox "文本框中行号为" & s & "行索引号为" & i & "的行有" & GetTextBoxMessage & "个字符", vbOKOnly, "获得字符的个数" End Select End SubPublic Static Function GetTxtIndex() As Long On Error GoTo MoveErr Dim x As Long Dim txtmsg_API As txtNewClass Set txtmsg_API = New txtNewClass x = List1.Text GetTxtIndex = txtmsg_API.GetTextBoxIndex(txt, x) Exit Function MoveErr: Exit Function End FunctionPrivate Sub Form_Load() txt.Text = "0.abcdefghijklmnopqrstuvwxyz" & vbCrLf _ & "1.abcdefghijklmnopqrstuvwxy" & vbCrLf _ & "2.abcdefghijklmnopqrstuvwx" & vbCrLf _ & "3.abcdefghijklmnopqrstuvw" & vbCrLf _ & "4.abcdefghijklmnopqrstu" & vbCrLf _ & "5.abcdefghijklmnopqrst" & vbCrLf _ & "6.abcdefghijklmnopqrs" & vbCrLf _ & "7.abcdefghijklmnopqr" & vbCrLf _ & "8.abcdefghijklmnopq" End Sub Private Sub txt_Change() Dim i As Long Dim txtmsg As txtNewClass Set txtmsg = New txtNewClass Dim TextBoxLineCount As Long List1.Clear TextBoxLineCount = txtmsg.TextBoxLineCount(txt) For i = 0 To TextBoxLineCount - 1 List1.AddItem i Next i List1.ListIndex = 0 End Sub
楼上的老兄,真是挺热心的,不过我得漫漫琢磨,加分有你一分,不管怎么说。 不过说实话,我还是打算用open filename as ... 比较明朗, 欢迎各位提供读取每一行的代码,谢谢!
不过说实话,我还是打算用open filename as ... 比较明朗, 欢迎各位提供读取每一行的代码,谢谢!
你的循环语句有问题,最好改成如下 Do while not EOF(1) Line Input #1, TextLine Loop
也许文件号1有冲突 Dim intHandle As Integer intHandle = FreeFile Open "TESTFILE" For Input As #intHandle ..... Close #intHandle
然后你一定会有错误的
Open "TESTFILE" For Input As #1 ' 打开文件。
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。
Debug.Print TextLine ' 在立即窗口中显示数据。
Loop
Close #1 ' 关闭文件。
Public Function loadline(fnamea As String, mon As String, tue As String, _
wed As String, thu As String, fri As String, sat As String, sun As String, _
pdefault As String, runon As String, daten As String) As Boolean
Dim kg(8) As String
Dim i As Integer
i = 0
On Error GoTo errorhandler
Open App.Path + "\script.txt" For Input As #1
Do Until EOF(1)
Line Input #1, kg(i)
i = i + 1
Loop
Debug.Print kg(8)
tue = kg(0)
wed = kg(1)
thu = kg(2)
fri = kg(3)
sat = kg(4)
sun = kg(5)
pdefault = kg(6)
runon = kg(7)
daten = kg(8)
errorhandler: On Error Resume Next
Close #1
End Function
我真是想破了头皮都不得其解,各位帮帮我!各位帮帮我!各位帮帮我!
各位帮帮我!各位帮帮我!各位帮帮我!
应该不是这个地方的问题Try 把#1改为FreeFile;或者把script.txt的内容列出来
classmodule
Command2(0)
Command2(1)
Command2(2)
Command1(0)
Command1(1)
Command1(2)
Command1(3)
txt
Frame1
List1
Label1
Frame2Option ExplicitPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) 'SendMessage函数用法见《visual basic 与 windows API 讲座》148页Const EM_GETLINECOUNT = &HBA '计算text的总行数Const EM_GETLINE = &HC4 '读取text一行的字符串Const EM_LINEINDEX = &HBB '读取某一行第一个字符在text中的索引Const EM_LINELENGTH = &HC1 '读取某一字符所在的行的字符数Const EM_SCROLL = &HB5 '以行或页为单位卷动text,具体可以设置成以下值
Const SB_LINEUP = 0 '上卷一行Const SB_LINEDOWN = 1 '下卷一行Const SB_PAGEDOWN = 3 '下翻一页Const SB_PAGEUP = 2 '上翻一页Public Sub TextBoxScroll(txt As TextBox, SetScroll As Integer)
'参数1:textbox的hwnd
'参数2:textbox要执行的动作
Select Case SetScroll
Case 0 '上卷一行
SendMessage txt.hwnd, EM_SCROLL, SB_LINEUP, ByVal 0&
Case 1 '下卷一行
SendMessage txt.hwnd, EM_SCROLL, SB_LINEDOWN, ByVal 0&
Case 2 '上翻一页
SendMessage txt.hwnd, EM_SCROLL, SB_PAGEUP, ByVal 0&
Case 3 '下翻一页
SendMessage txt.hwnd, EM_SCROLL, SB_PAGEDOWN, ByVal 0&
End Select
End SubPublic Function TextBoxLineCount(txt As TextBox) As Long
'返回text的总行数
'参数:textbox的hwnd
TextBoxLineCount = SendMessage(txt.hwnd, EM_GETLINECOUNT, 0, ByVal 0&)
End FunctionPublic Function GetTextBoxIndex(txt As TextBox, GetLine As Long) As Long
'返回某一行第一个字符在text中的索引
'参数1:textbox的hwnd
'参数2:要读取的行
GetTextBoxIndex = SendMessage(txt.hwnd, EM_LINEINDEX, GetLine, ByVal 0&)
End FunctionPublic Function GetLineCharCount(txt As TextBox, GetTextBoxIndex As Long) As Long
'读取某一行的字符个数
'参数1:textbox的hwnd
'参数2:要读取的行在text中的索引
GetLineCharCount = SendMessage(txt.hwnd, EM_LINELENGTH, GetTextBoxIndex, ByVal 0&)
End FunctionPublic Function GetLineChar(txt As TextBox, GetTextBoxIndex As Long) As String
'读取某一行的字符
'参数1:textbox的hwnd
'参数2:要读取的行在text中的索引
Dim s As String
Dim Length As Long '文本的长度
Length = SendMessage(txt.hwnd, EM_LINELENGTH, GetTextBoxIndex, ByVal 0&)
s = String(Length, Chr(0)) '配置字符串
RtlMoveMemory ByVal s, Length, 2 '填入存储器的长度,必须的
SendMessage txt.hwnd, EM_GETLINE, GetTextBoxIndex, ByVal s
GetLineChar = s
End Function
=============
Option ExplicitPrivate Sub Command1_Click(Index As Integer)
Dim txtMessage As txtNewClass
Set txtMessage = New txtNewClass
txtMessage.TextBoxScroll txt, Index
End SubPrivate Sub Command2_Click(Index As Integer)
Dim i As Long
Dim s As Long
Dim GetTextBoxMessage As Long
Dim GetTextBoxString As String
Dim txtmsg_API As txtNewClass
Set txtmsg_API = New txtNewClass
s = List1.Text
Select Case Index
Case 0
i = GetTxtIndex
GetTextBoxString = txtmsg_API.GetLineChar(txt, Val(s))
MsgBox "文本框中行号为" & s & ",索引号为" & i & " 的字符串是:" & vbCrLf & GetTextBoxString, vbOKOnly, "获得字符串"
Case 1
GetTextBoxMessage = txtmsg_API.TextBoxLineCount(txt)
MsgBox "文本框的总行数为" & vbCrLf & GetTextBoxMessage, vbOKOnly, "获得字符的行数"
Case 2
i = GetTxtIndex
GetTextBoxMessage = txtmsg_API.GetLineCharCount(txt, i)
MsgBox "文本框中行号为" & s & "行索引号为" & i & "的行有" & GetTextBoxMessage & "个字符", vbOKOnly, "获得字符的个数"
End Select
End SubPublic Static Function GetTxtIndex() As Long
On Error GoTo MoveErr
Dim x As Long
Dim txtmsg_API As txtNewClass
Set txtmsg_API = New txtNewClass
x = List1.Text
GetTxtIndex = txtmsg_API.GetTextBoxIndex(txt, x)
Exit Function
MoveErr:
Exit Function
End FunctionPrivate Sub Form_Load()
txt.Text = "0.abcdefghijklmnopqrstuvwxyz" & vbCrLf _
& "1.abcdefghijklmnopqrstuvwxy" & vbCrLf _
& "2.abcdefghijklmnopqrstuvwx" & vbCrLf _
& "3.abcdefghijklmnopqrstuvw" & vbCrLf _
& "4.abcdefghijklmnopqrstu" & vbCrLf _
& "5.abcdefghijklmnopqrst" & vbCrLf _
& "6.abcdefghijklmnopqrs" & vbCrLf _
& "7.abcdefghijklmnopqr" & vbCrLf _
& "8.abcdefghijklmnopq"
End Sub
Private Sub txt_Change()
Dim i As Long
Dim txtmsg As txtNewClass
Set txtmsg = New txtNewClass
Dim TextBoxLineCount As Long
List1.Clear
TextBoxLineCount = txtmsg.TextBoxLineCount(txt)
For i = 0 To TextBoxLineCount - 1
List1.AddItem i
Next i
List1.ListIndex = 0
End Sub
不过说实话,我还是打算用open filename as ... 比较明朗,
欢迎各位提供读取每一行的代码,谢谢!
欢迎各位提供读取每一行的代码,谢谢!
Do while not EOF(1)
Line Input #1, TextLine
Loop
Dim intHandle As Integer
intHandle = FreeFile
Open "TESTFILE" For Input As #intHandle
.....
Close #intHandle