◆ 如何读取文本文件中指定的某一行的字符?

zzlcn 2004-01-10 12:32:54
◆ 如何读取文本文件中指定的某一行的字符?

比如一个文本文件有10000行

我要读取第567行的字符

如何实现

最好写一个过程直接调用

比如

texe1.text = read(567)

希望大家帮忙,我将100分奉上,不够我还有很多分
...全文
361 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzlcn 2004-01-10
  • 打赏
  • 举报
回复
已经解决

Sub 读取到数组()
I = 1
FileName = App.Path & "\" & WjmText.Text & ".rw"
Open FileName For Input As #1 '打开文件
Do Until EOF(1) '开始循环
Line Input #1, link(I) '读取一行并赋值给数组
I = I + 1
Loop
Close #1 '关闭文件
MsgBox ("共有:" & I & "个任务!")
End Sub
ZJYUNCSUNDN 2004-01-10
  • 打赏
  • 举报
回复
读入一个字符串变量里,在用SPLIT函数以VBCRLT为分隔符,读入一个数组,在去操作数组就可以了,简单啊
rainstormmaster 2004-01-10
  • 打赏
  • 举报
回复
建议直接从文件读取,而不要用textbox作为载体
mmcgzs 2004-01-10
  • 打赏
  • 举报
回复
Function GetFileLine(tFileName As String, lNumber As Long) As String
'On Error Resume Next
Dim i As Integer
Dim tmp As String
Dim szInputData As String
Open tFileName For Input As #1

Do While Not EOF(1)

i = i + 1

Line Input #1, szInputData

If i = lNumber Then

tmp = szInputData

End If
Loop

Close #1

GetFileLine = tmp

End Function

'这样调用
MsgBox GetFileLine("c:\test.txt", 2)
WIN2K+VB6下调试通过
xiaohu9711 2004-01-10
  • 打赏
  • 举报
回复
怎样写一个字符串到文本中啊?
northwolves 2004-01-10
  • 打赏
  • 举报
回复
Function readline(txtpath As String, linenum As Integer) As String
Dim filetxt As String, x As Variant, i As Integer
filetxt = String(FileLen(txtpath), " ")
Open txtpath For Binary As 1
Get #1, , filetxt
Close 1
x = Split(filetxt, vbCrLf)
If linenum > UBound(x) Then MsgBox "行溢出", 64, "err!": Exit Function
If linenum <= UBound(x) Then readline = x(linenum - 1)
Set x = Nothing
End Function

Private Sub Command1_Click()
MsgBox readline("c:\xxx.txt", 567)
End Sub
踏平扶桑 2004-01-10
  • 打赏
  • 举报
回复
快速读取TextBox第N行的数据
(录入日期:2001.10.17 阅读次数:626) 转载不详
作者:不详

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

快速读取TextBox第N行的数据


TextBox 是以 vbCr+vbLf 为分行符号, 如果我们要逐一读取 TextBox 每一行, 无非是寻找 vbCr+vbLf 的所在位置, 然后取出每一行的字串, 不过这个方法不快,而且如果我们要读取第 N 行数据,还是要从第 1、2、…N-1 行逐一读起,实在麻烦。 还好 Windows API 提供有读取 TextBox 第 N 行的功能, 细节如下:

1、API 的声明:

Public Const EM_GETLINE = &HC4
Public Const EM_LINELENGTH = &HC1
Public Const EM_LINEINDEX = &HBB

Private 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)

2. 程序范例:


Sub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String)

Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long

lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&)

length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&)

If length > 0 Then
ReDim bArr(length + 1) As Byte,bArr2(length - 1) As Byte
Call RtlMoveMemory(bArr(0), length, 2) 注释:准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度
Call SendMessage(hWnd, EM_GETLINE,whichLine, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), length)
Line = StrConv(bArr2, vbUnicode)
Else
Line = ""
End If

End Sub


注释: 假设要读取 Text1 第 5 行的数据

Dim S As String

Call TB_GetLine( Text1.hWnd, 5, S )

注释: 传回值 S 即等于第 5 行的数据

( 注:TextBox 的行次是从 0 起算。)

yoki 2004-01-10
  • 打赏
  • 举报
回复
你可以将他读到一个TextBox中,然后:
TextBox 是以 vbCr+vbLf 为分行符号, 如果我们要逐一读取 TextBox 每一行, 无非是寻找 vbCr+vbLf 的所在位置, 然后取出每一行的字串, 不过这个方法不快,而且如果我们要读取第 N 行数据,还是要从第 1、2、…N-1 行逐一读起,实在麻烦。 还好 Windows API 提供有读取 TextBox 第 N 行的功能, 细节如下:
1、API 的声明:
Public Const EM_GETLINE = &HC4
Public Const EM_LINELENGTH = &HC1
Public Const EM_LINEINDEX = &HBB
Private 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)
2. 程序范例:
Sub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String)
Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long
lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&)
length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&)
If length > 0 Then
ReDim bArr(length + 1) As Byte,bArr2(length - 1) As Byte
Call RtlMoveMemory(bArr(0), length, 2) '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度
Call SendMessage(hWnd, EM_GETLINE,whichLine, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), length)
Line = StrConv(bArr2, vbUnicode)
Else
Line = ""
End If
End Sub
' 假设要读取 Text1 第 5 行的数据
Dim S As String
Call TB_GetLine( Text1.hWnd, 5, S )
' 传回值 S 即等于第 5 行的数据
( 注:TextBox 的行次是从 0 起算。)
FSoft 2004-01-10
  • 打赏
  • 举报
回复
修改一下

Private Const EM_GETLINE = &HC4
Private 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 Function fStrCopy(gHwnd As Long, gLngnums As Long) As String
On Error GoTo fStrCopy_Err
'gHwnd文本框的hwnd属性
'gLngnums为为复制的行号
Dim gLngA As Long, gStrA As String
gStrA = Space(255) '缓冲区大小
gLngA = SendMessage(gHwnd, EM_GETLINE, gLngnums, gStrA)
fStrCopy=left(gStrA,gLngA)
Exit Sub
fStrCopy_Err:
MsgBox Err.Description, vbCritical, "错误"
Exit Sub
End Function
FSoft 2004-01-10
  • 打赏
  • 举报
回复
Private Const EM_GETLINE = &HC4
Private 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 Function fStrCopy(gHwnd As Long, gLngnums As Long) As String
On Error GoTo fStrCopy_Err
'gHwnd文本框的hwnd属性
'gLngnums为为复制的行号
Dim gLngA As Long, gStrA As String
gStrA = Space(255) '缓冲区大小
gLngA = SendMessage(gHwnd, EM_GETLINE, gLngnums, gStrA)
Exit Sub
fStrCopy_Err:
MsgBox Err.Description, vbCritical, "错误"
Exit Sub
End Function
busisoft 2004-01-10
  • 打赏
  • 举报
回复
Dim szFileName As String
Dim szInputData As String
Dim i As Integer

szFileName = App.Path & "\aaa.txt"

Open szFileName For Input As #1
Do While Not EOF(1)
i = i + 1
If i = 567 Then
Line Input #1, szInputData
Text1.Text = szInputData
End If
Loop
Close #1

7,763

社区成员

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

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