分享

vb读取txt文件到textbox

 nxhujiee 2010-04-10
vb读取txt文件到textbox

1.怎么通过代码创建一个文本文件,并读取,更新内容
以上为随即方式打开的文本文件
dim gfilenum as integer
gfilenum = FreeFile
Open   "文件路径及文件名" For Random As gfilenum len=3
\'以随即方式打开一文件如果文件不存在就新建
用get #gfilenum ,记录在文件中位置,要放取得的数据的变量\'读取操作
用put #gfilenum ,记录在文件中位置,要放着要写入数据的变量\'写操作
close #filenum\'关闭文件
以下为顺序方式打开的文件
dim gfilenum as integer
gfilenum = FreeFile
Open   "文件路径及文件名" For output As gfilenum \'以写入方式打开文本
print #gfilenum,要写入的文本
write #filenumber,要写入的文本

dim gfilenum as integer
gfilenum = FreeFile
Open   "文件路径及文件名" For input As gfilenum \'以读出方式打开文本
input #gfilenum ,用来放读取的内容的内存变量名
还可用line input#,input()等读取更详细的查msdn

2.VB读取文本文件时,调用TextStream 对象中使用OpenTextFile报错了。
如果是
Set f = fs.OpenTextFile("E:\\table\\trace.txt", forreading, True, TristateUseDefault)
出现错误:
Run-time error \'5\':
Invalid procedure call or argument

如果是
Set f = fs.OpenTextFile("E:\\table\\trace.txt)"
则不会报错。

用文件对象啊FileSystemControl操作就好了啊
再加上一个TextStream读取文件第一行就好了啊。

3.VB通过FileSystemObject,可以读取文本文件(.txt)。对于.bat文件,VB可否直接读取?
bat也属于文本类文件
可以读取

不用FSO也行:

把文本文件内容读取TextBox:
Dim TempFile As Long
Dim LoadBytes() As Byte

TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Redim LoadBytes(1 To Lof(TempFile)) As Byte
Get #TempFile,,LoadBytes
Close TempFile

Text1.Text=StrConv(LoadBytes,vbUniCode)

把TextBox内容写入文本文件:
Dim TempFile As Long
Dim SaveBytes() As Byte

SaveBytes=StrConv(Text1.Text,vbFromUniCode)

TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Put #TempFile,,SaveBytes
Close TempFile

4.
打开文本文件  
open app.path &"/你的文本文件名.txt" for output as #1
     Message.Name=text1.text
     Message.Phone=text2.text
     .......................
     message.PostCode=text5.text
Put #1,i,Message   \'(此处i=1,如要多次写入,可用循环设置i的值)
close #1
\'写入的同时即已保存
查询的话就取出文本里的内容,用instr()函数就可实现了

5.
查找vbCrLf、vbLf换行标记

6.怎样读取一个文本文件的全部内容
dim lenfile as integer
dim filenum as integer
filenum=freefile()
open "file.dat" for input as filenum
lenfile=lof(#filenum)
strfile=input(lenfile,#filenum)\'将所有数据放入变量strfile中
close filenum

Private Sub Form_Load()
     Const ForReading = 1, ForWriting = 2
     Dim fso, f
     Dim SkipLineInFile As String
     Set fso = CreateObject("Scripting.FileSystemObject")
     Set f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, True)
     f.Write "Hello world!" & vbCrLf & "VB Script is fun!"
     Set f = fso.OpenTextFile("c:\\testfile.txt", ForReading)
     SkipLineInFile = f.readall
     Debug.Print SkipLineInFile

End Sub

7.把文本文件内容读取TextBox:
Dim TempFile As Long
Dim LoadBytes() As Byte

TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Redim LoadBytes(1 To Lof(TempFile)) As Byte
Get #TempFile,,LoadBytes
Close TempFile

Text1.Text=StrConv(LoadBytes,vbUniCode)

8. 把TextBox内容写入文本文件:
Dim TempFile As Long
Dim SaveBytes() As Byte

SaveBytes=StrConv(Text1.Text,vbFromUniCode)

TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Put #TempFile,,SaveBytes
Close TempFile

9.已知文本文件,要从中搜索一段特定的字符串信息。如搜索[MAGIC_DATABASES],该怎么做?
dim str as string
open commondialog1.filename for input #1
input #1, str
dim where as integer
where = instr(str,"magic_databases")

10.
Line Input # 语句示例
本示例使用 Line Input # 语句从顺序文件中读入一行数据,并将该行数据赋予一个变量。本示例假设 TESTFILE 文件内含数行文本数据。

Dim TextLine
Open "TESTFILE" For Input As #1   \' 打开文件。
Do While Not EOF(1)   \' 循环至文件尾。
     Line Input #1, TextLine   \' 读入一行数据并将其赋予某变量。
     Debug.Print TextLine   \' 在立即窗口中显示数据。
Loop
Close #1   \' 关闭文件。

11.如何操作“文本文件”
fso(Filesystemobject)对象集中的文件集合里有readline方法。

Dim of As Object
Dim fs as Object
dim TextLine as string

Set fs=createobject("scripting.Filesystemobject")
set of=fs.OpenTextFile(app,path+"\\myfile.aaa")
//myfile.aaa 是一个文本文件
textling=of.readline
//如果你要读取第14行,可以用一个循环,跳过前面的13行,如下
dim lop as integer
for lop=0 to 12
   of.skip
next
//然后再读取

12.
搜索了一下,大家主要用两种方法对文本文件加密。
1.对文本文件的ASC码加减
2.用XOR函数

我发现都有问题举例
1.代码
Public Function nnnn(ByVal s As String) As String \'解密
On Error Resume Next
Dim ss As String, i As Byte, lens As Byte
lens = Len(s)
For i = 1 To lens
   ss = ss & Chr(Asc(Mid(s, i, 1)) - lens - i)
Next
nnnn = ss
End Function


Public Function mmmm(ByVal s As String) As String   \'加密
On Error Resume Next
Dim ss As String, i As Byte, lens As Byte
lens = Len(s)
For i = 1 To lens
   ss = ss & Chr(Asc(Mid(s, i, 1)) + lens + 1)
Next
mmmm = ss
End Function
当文件中有“!~”时出错

XOR加密
Dim I as long

For I=1 To UBound(LoadBytes)
   LoadBytes(I)=LoadBytes(I) Xor &HFF
Next I

13.怎么判断一个文本文件是否打开?
判断如果没打开就删除该文本文件!
要用到FileSystemObject 对象的 FileExists 和 deletefile方法

if dir(myfile)="" then exit sub
FileNumber = FreeFile   \' 取得未使用的文件号。
On Error GoTo ErrorHandler   \' 打开错误处理程序。
Open MyFile For Output As #FileNumber   \' 打开输出文件。
Kill "TESTFILE"   \' 试图删除已打开的文件。
Exit Sub   \' 退出程序,以避免进入错误处理程序。

ErrorHandler:   \' 错误处理程序。
     Select Case Err.Number   \' 检查错误代号。
     Case 55   \' 发生“文件已打开”的错误。
     Close #FileNumber       \' 关闭已打开的文件。
     Case Else
     \' 处理其他错误状态 . . . 
     End Select
     Resume   \' 将执行返回到发生错误的语句。

14.打开一个文本文件怎样最快?
Dim fn As Long, ts As String
fn = FreeFile
Open "c:\\test.txt" For Binary As #fn
ts = StrConv(InputB(LOF(fn), #fn), vbUnicode)
Text1 = ts
Close #fn

Dim fn As Long, ts As String
fn = FreeFile
Open "c:\\test.txt" For Binary As #fn
ts = Input(LOF(fn), #fn)
Text1 = ts
Close #fn

15.怎么判断文本文件读取到了最后一行?
用fsoTextStream.AtEndOfStream可以判断

16.如何在文本文件中插入一行字串?
用Open For Append的方法只能加在最后面

就用两个文件合并好了
Shell "command /c copy aa.txt + bb.txt cc.txt ", vbHide
但我觉的不是太好,你自己看看对你有没有帮助吧。

17.
Open "TESTFILE.txt" For Output As #1   \' 打开输出文件。
Write #1, "Hello World",   \' 写入以逗号隔开的数据。
Write #1,   \' 写入空白行。
Close #1   \' 关闭文件
请问怎样在原先TESTFILE.txt增加Hello World(即不删除原先的内容)
   
Open "TESTFILE.txt" For Append As #1
Write #1, "Hello World",
Close #1

18.如何实现对文本文件任意一行的读写?
利用VB的File System Objects(FSO)对象模型
要想对任一行读写,不用将前面内容顺序读出,但要用FSO对象的方法移动文件指针,具体方法如下:

1. 在VB编辑器中引用“Microsoft Scripting RunTime"

2. Dim fso As New FileSystemObject   \'定义FSO对象
     Dim ts As TextStream               \'定义文本流

     \'打开文件
     Set ts = fso.OpenTextFile("c:\\test.txt", ForWriting)

之后即可用ts的方法进行操作,可参见MSDN,以下简要说明:
   读数据有:Read、ReadLine、ReadAll  
   写数据有:Write、WirteBlankLine、WirteLine
   移动文件指针有:Skip、SkipLine

操作完毕要关闭文件流
   ts.close

19.在文件结尾写上新的行:
Dim tFileNumber As Integer 
Dim tWriteStr As String \'要写的字符串。
tFileNumber=FreeFile
tWriteStr=你需要的内容
Open pFileName For Append As #tFileNumber \'Append为在文件结尾顺序写文件夹。或者以Output模式打开,使用Seek(tFileNumberm,LOF(tFileNumber))也可以定义指针到文件结尾。
   Print #tFileNumber,tWriteStr \'写到文件里。
Close #tFileNumber

如果文件上一行没有换行,将导致你写的第一行和原来文件最后一行接在一起。解决办法是:

tWriteStr=Chr(13) & Chr(10) & tWriteStr

在写第一行前加这一句,将导致在这行前加换行符号。

  另外,假如你有100行要写的内容,那么你往文件写100次不如把100行合并成一个字符串一起写的好。写100行的时间比合并100行后写一次的时间要慢。
  同时,不要多次Open Close地写文件。Open和Close都要重新分配缓冲区,导致程序速度下降。尽量在一次Open后,全部写完再Close,这样可以提高效率。
  但是需要特别注意!在Close前,如果程序因某种原因非法关闭,那么可能要丢失数据。因为只有在Close后才将缓冲区里的信息真正全部保存。而没有Close的文件,可能有部分内容在内存里没有存盘,这是很危险的。如果你确保在短时间内进行单一的操作,那么就在Close前写过程。如果需要长时间的复杂操作,就要多次Open Close了。
     在Open Close之间进行存取操作将获得最快的效率,而分多次Open Close获得最佳的安全。此外还有一个诀窍:如果你想在读一个文件同时写一个文件,那只要把它分别用两个方式打开。

   Open "1.txt" For Input As #1
   Open "1.txt" For Output As #2
     Print #2,"小仙妹" \'写1.txt
     Seek #1,1
     Line Input #1,Ld   \'读1.txt
     Seek #1,1   \'如果去掉这句,你看看读第而次的时候会怎样?(肯定出错了!)
     Line Input #1,Ld 
   Close #2
   Close #1

典型的读文件:

Dim tFileNumber As Integer \'文件号
Dim tLoadStr As String \'读文件行的变量
tFileNumber=FreeFile       \'FreeFile是取当前闲置的文件号的函数。实现自动分配一个文件号码。这样使这段程序几乎可以兼容在程序所有的部分。
Open pFileName For Input As #tFileNumber \'Input方式为顺序读文件。
   Line Input #tFileNumber,tLoadStr \'Line Input语句为整行读取,否则如果只用Input则遇到逗号也算一个段落。如果你想读第12行,在不知道12行的位置的前提下,那要读12次的。
Close #tFileNumber

读文件指定行:读文件最大的问题就是判断文件的结束。如果超过文件结束,将产生错误。使用EOF函数可以判断“文件指针”是否到达文件结束位置。

方法一(传统方法):
Dim tFileNumber As Integer 
Dim tLoadStr As String 
Dim tEnd As Long \'你要读的行数。
Dim tAdd As Long \'记数
tFileNumber=FreeFile
tEnd=12 \'假设你要读12行
Open pFileName For Input As #tFileNumber 
   Do Until EOF(tFileNumber) Or tAdd=tEnd \'EOF函数是判断是否已经到了结尾或到了你想找的行。
   Line Input #tFileNumber,tLoadStr
   tAdd=tAdd+1 \'记数累加,读一行加一。
   Loop 
Close #tFileNumber

方法二(比较实用的):
Dim tFileNumber As Integer 
Dim tLoadStr As String 
Dim tEnd As Long \'你要读的行数。
Dim tAdd As Long \'记数
tFileNumber=FreeFile
tEnd=12 \'假设你要读12行
Open pFileName For Input As #tFileNumber 
   For tAdd=1 To tEnd
   Line Input #tFileNumber,tLoadStr
   If EOF(tFileNumber) Then Exit For \'到结尾则退出循环。
   Next
Close #tFileNumber

以上都是我在编程当中总结出来的非常惨痛的教训,希望你不要步我后尘。

20.用FSO来读文本文件时怎样返回该文本文件的总行数?
Set openfile = openfso.OpenTextFile(CommonDialog1.FileName)
   Static i As Integer
   i = 0
   Do While Not openfile.AtEndOfLine
   openfile.ReadLine
   i = i + 1
   Loop
   MsgBox "共" & i & "行", vbOKOnly, "hello"

21.treeview 能够生成两层以上的节点吗?
Private Sub Form_Load()
   Dim NodX As Node
   Set NodX = TreeView1.Nodes.Add(, , "R", "ROOT")
   Set NodX = TreeView1.Nodes.Add("R", tvwChild, "key1", "CHILD")
   Set NodX = TreeView1.Nodes.Add("key1", tvwChild, "key2", "CHILD_CHILD")
   NodX.EnsureVisible
End Sub

22.怎样获得一个文件夹里的文件数,并且分别得到里面的文件名?
dim sTemp as string
dim sFileName(100) as string   \'记录文件名
dim intTotal as integer   \'文件总数
intTotal=0
sTemp=Dir$(Path & "\\*.*")
do while sTemp<>""
     sFileName(intTotal)=sTemp
     intTotal=intTotal+1
     sTemp=Dir$
loop

23.取文件夹的文件名列表,并按修改时间排序?
\'添加[工程]--[引用] “Microsoft Scripting Runtime”


Option Explicit

Private Type typFlieDate
       Name As String
       CreatedDate As Date
       AccessedDate As Date
       ModifiedDate As Date
   End Type

Private myFiles() As typFlieDate   \'包含文件的数组

Private Sub Command1_Click()
   Dim n As Integer
   n = GetFolderFiles("d:\\", 1)
End Sub

Private Function GetFolderFiles(Path As String, OrderBy As Integer) As Integer
\'path 文件夹路径
\'orderby 排序依据   1:按创建时间   2:按访问时间   3:按修改时间   4:按名称
\'返回文件夹中文件的个数
\'如果要计算子文件夹可以通过 fldr.SubFolders 访问,方法类似

   Dim tmpFile As typFlieDate
   Dim n As Integer, i As Integer, j As Integer
   Dim fso As New FileSystemObject
   Dim fldr As Folder
   Dim fls As Files
   Dim fl As File
    
\'读去文件
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldr = fso.GetFolder(Path)
   Set fls = fldr.Files
   n = fls.Count
   If n > 0 Then
   ReDim myFiles(n - 1)
   i = 0
   For Each fl In fls
     myFiles(i).Name = fl.Name
     myFiles(i).AccessedDate = fl.DateLastAccessed
     myFiles(i).CreatedDate = fl.DateCreated
     myFiles(i).ModifiedDate = fl.DateLastModified
     i = i + 1
   Next
\'排序     ---   升序
   For i = 0 To n - 1
     For j = i + 1 To n - 1
   Select Case OrderBy
     Case 1         \'创建时间
     If myFiles(i).CreatedDate > myFiles(j).CreatedDate Then
       tmpFile = myFiles(i)
       myFiles(i) = myFiles(j)
       myFiles(j) = tmpFile
      
\'               tmpFile.Name = myFiles(i).Name
\'               tmpFile.AccessedDate = myFiles(i).AccessedDate
\'               tmpFile.CreatedDate = myFiles(i).CreatedDate
\'               tmpFile.ModifiedDate = myFiles(i).ModifiedDate
\'
\'               myFiles(i).AccessedDate = myFiles(j).AccessedDate
\'               myFiles(i).CreatedDate = myFiles(j).CreatedDate
\'               myFiles(i).ModifiedDate = myFiles(j).ModifiedDate
\'               myFiles(i).Name = myFiles(j).Name
\'
\'               myFiles(j).AccessedDate = tmpFile.AccessedDate
\'               myFiles(j).CreatedDate = tmpFile.CreatedDate
\'               myFiles(j).ModifiedDate = tmpFile.ModifiedDate
\'               myFiles(j).Name = tmpFile.Name
     End If
      
     Case 2         \'访问时间
     If myFiles(i).AccessedDate > myFiles(j).AccessedDate Then
       tmpFile = myFiles(i)
       myFiles(i) = myFiles(j)
       myFiles(j) = tmpFile
     End If
     Case 3         \'修改时间
     If myFiles(i).ModifiedDate > myFiles(j).ModifiedDate Then
       tmpFile = myFiles(i)
       myFiles(i) = myFiles(j)
       myFiles(j) = tmpFile
     End If
     Case 4         \'名称
     If UCase(myFiles(i).Name) > UCase(myFiles(j).Name) Then
       tmpFile = myFiles(i)
       myFiles(i) = myFiles(j)
       myFiles(j) = tmpFile
     End If
   End Select
     Next j
   Next i
   End If
   GetFolderFiles = n
End Function

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多