在VB中,打开文件后,怎样把一行文字读入一个变量中?

jing1023 2005-10-06 08:47:53
文件内容:
姓名=123
性别=男

打个比方:比如上面是一个文件,我是用OPEN打开的文件,但是应该怎样把用OPEN打开的文件里的内容,如“123”存入一个变量,“男”存入另一个变量中呢?因为我要读的文件比较大,可能有100行左右吧!

我看了N遍VB的书,网上也查找了一下,但还是不知应该如何解决?还请各位大侠指点?
...全文
458 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhijian 2005-10-10
  • 打赏
  • 举报
回复
Open App.Path & "\test.txt" For Input As #a1 ' 打开文件
Do While Not EOF(a1) ' 循环至文件尾
Line Input #a1, Tmp_Str ' 读入一行数据并将其赋予某变量
msgbox split(Tmp_Str,"=")(1) '拆分一行数据
Loop
Close #a1 ' 关闭文件
liang80318 2005-10-10
  • 打赏
  • 举报
回复
真是啊,学习要举一反三啊
下标越界就是超出行数的范围了
加个错误处理不就行了吗,因为我的发票是不定行的,也不知道以后会多少行,所以用个笨办法,循环的多一点的,已经加到十万了,
然后你加个错误处理
捕捉到这个错误的话,不显示错误
显示“数据导入完毕!”,不就可以了吗,如果支行中碰到这个错误的时候,就出循环,直接到错误处理了。

顺便说一声,编程的话,错误处理很关键,虽然这个办法不是太好,但是READLINE这个函数太讨厌了
每次只用一运行,就会自动向下一行。
如果我说的还不清楚的话,发邮件吧 liang80318@yahoo.com.cn
jing1023 2005-10-10
  • 打赏
  • 举报
回复
谢谢了~~~~~~~
jing1023 2005-10-09
  • 打赏
  • 举报
回复
昨天没有来上网,呵呵~~~~~谢谢各位的宝贵意见!
在经过N天后的摸索后,本人用了一种笨办法(实在想不出更好的办法了),因为我在用的"liang80318(小亮)"教我的办法后,老是出现"下标越界"的错误提示,我也不知道怎么回事,呵呵!我把自己打算采取的代码附在后面,如果"liang80318(小亮)"这位朋友看到的话,能不能把你说的开票的代码关于我想要的部分发一段给我,不胜感激!!!

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Open "E:\111111.txt" For Input As #1

Do While Not EOF(1)
Line Input #1,chg
If Left(chg, 5) = "*****" Then
a = Mid(chg, 6)
ElseIf Left(chg, 7) = "*******" Then
b = Mid(chg, 8)
......
End If
Loop

Close #1

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
这样的话,我就可以把这么多变量全部采集到,然后一次把这些数据录入到数据库,希望大家给个意见
ndjsyangpeng 2005-10-08
  • 打赏
  • 举报
回复
up
liang80318 2005-10-08
  • 打赏
  • 举报
回复
都太麻烦了吧
Dim Fso As New FileSystemObject, ts As TextStream
Set ts = Fso.OpenTextFile("C:\Documents and Settings\Administrator\桌面\INVOUT.TXT", 1)
Text.Text = Trim(ts.ReadLine)
这样就可以读取每一行,但是看你的问题,是想把数据写到数据库中,那你这样做
最好是样做,每次循环行数的时候,都执行INSERT语句,速度不会很慢的,我有一个程序是写发票用的
几千行数据,好几个字段,三四秒就可以了。
strs,str1,str2为四个字符变量
Dim vntSplit As Variant 
 FOR INTI=1 TO 行数
strs = ts.ReadLine ‘读取每一行
vntSplit = Split(strs, "=") 用它来分割字符,分分割符为=
str1 = vntSplit(1) 取=前面的
str2 = vntSplit(2) 取=后面的
    rs.open "insert " 这里用语句将变量插入到数据库中
NEXT

这个办法可以试试
threenewbee 2005-10-08
  • 打赏
  • 举报
回复
InStr 函数
Right 函数
TBNTB 2005-10-07
  • 打赏
  • 举报
回复
都是高手
jing1023 2005-10-07
  • 打赏
  • 举报
回复
先谢谢各位了!!!
可能我昨天没有说清楚,我再解释一下,希望各位再帮我个忙!!!

'我要读取的文件

姓名=111111
单位地址=222222
... ...

现在我要解决的问题是:每读取一行,然后读取这个字段的其中几个字符,存入一个变量,以第一行为例:读取第一行后,我要把这一行“=”后面的字符存入变量sName中,以此类推,由于我要读的文件有好几十行,而且每个变量还在存入数据库,所以我想总不可能读一个打开数据库,把它存入,再读一行,再存入吧,但是,行数是固定不变的,所以还得想请各位帮忙了!

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
由于我只看了几本教程,在编程的过程中也是边看例子边学习,所以API我真的一点都不懂,虽然我也很想把例子看懂。
jing1023 2005-10-07
  • 打赏
  • 举报
回复
谢谢!!!
kmzs 2005-10-07
  • 打赏
  • 举报
回复
line input
我只用Line Input
northwolves 2005-10-06
  • 打赏
  • 举报
回复
你的文件格式按INI方式读取操作性更好一些,方法可参考MSDN ,或 http://community.csdn.net/Expert/topic/3201/3201943.xml?temp=.5203974
Cerulean_ZC 2005-10-06
  • 打赏
  • 举报
回复
Dim sName As String
Dim sSex As String

Private Sub Command1_Click()
Dim sInput As String
Dim sArray
Open "D:\11.txt" For Input As #1
Line Input #1, sInput
sSplit (sInput)
Line Input #1, sInput
sSplit (sInput)
Close #1
Label1.Caption = sName
Label2.Caption = sSex
End Sub

Private Sub sSplit(sInput As String)
Dim sArray
sArray = Split(sInput, "=")
If sArray(0) = "姓名" Then sName = sArray(1)
If sArray(0) = "性别" Then sSex = sArray(1)
End Sub
Featured 2005-10-06
  • 打赏
  • 举报
回复
楼上都说了,我也说种方法:
先到 工程-引用-Microsoft Scripting Runtime ,选中

然后:
dim fso as new FileSystemObject,txtfil as textStream
set txtfil=fso.OpenTextFile("d:\a.txt")
dim strLine as string
strLine=txtfil.ReadLine()
txtfil.close
truewill 2005-10-06
  • 打赏
  • 举报
回复
Line Input #filenumber, varname
饮水需思源 2005-10-06
  • 打赏
  • 举报
回复
Open App.Path & "\test.txt" For Input As #a1 ' 打开文件
Do While Not EOF(a1) ' 循环至文件尾
Line Input #a1, Tmp_Str ' 读入一行数据并将其赋予某变量
msgbox Tmp_Str
Loop
Close #a1 ' 关闭文件
API之网络函数1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统所有的顶级窗口 GetMessagePos 取得消息队列上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作 DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 FindFirstFile 根据文件名查找文件 FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 GetBinaryType 判断文件是否可以执行 GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 GetCurrentDirectory 在一个缓冲区装载当前目录 GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 GetDriveType 判断一个磁盘驱动器的类型 GetExpandedName 取得一个压缩文件的全名 GetFileAttributes 判断指定文件的属性 GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断文件长度 GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息
简介:CETool是一个WinCE的辅助程序,使用C语言和Windows API编写,作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过解析配置文件内容来执行相应的操作,属于一种脚本解析程序。程序有以下特点:1. 程序一般是在原路径执行,比如一开始就放置在\Storage Card\目录下,即打开后就以\Storage Card\为工作目录开始处理各项操作。考虑到在程序运程过程可能要对程序所在分区(或磁盘)进行格式化(或者是移除SD卡)等操作,故添加了一项“自我复制到内存运行”的功能,即启动后先检测工作目录是不是在内存虚拟出来根目录"\"下,如果不是则先对自身进行复制再重新加载复制后的可执行文件,以便后续的SD移除、或者格式化等操作。对于配置文件,因为是一开始就读进内存的,所以无需进行复制。此功能一般都不需要使用,即直接在原来的路径运行即可,如需开始此功能,只需将配置文件的文件名从CETool.ini改为_CETool.ini即可。 2. 程序在一次性加载完配置文件后,接着逐行去解析文件内容,遇到注释行或者是格式不正确的行则跳过该行,配置文件有以下特点: (1)配置文件无大小限制,仅取决于物理内存大小,支持Unicode与ANSI编码的文件格式; (2)配置文件每行的长度无限制,但某些操作的参数对长度有一定限制,如创建目录时,作为目录名的参数的长度有限制(这是文件系统和API的问题)。 (3)各个操作放置的位置、出现的次数无限制。 (4)每一行的子操作数量无限制。 (5)具有合理的严格性和纠错处理,每一行在'='后边非关键字处可随意添加空格、制表符、逗号,不影响正常解析,关键内容可以加上引号(单引号和双引号的区别,将在后述提到),如包含空格的路径、参数等。详细介绍参数特殊说明。 3. 支持相对路径的表示方式。参考特殊说明。 4. 支持从文件读入并作为参数的方式(即配置文件嵌入其它文件,嵌套层数无限制,一般为临时创建的文件,一些不确定参数可以先保存到临时文件,再用此程序读取)。参考特殊说明。5. 支持VB代码嵌入,方便变量使用、判断、循环(这些还有些问题需要解决,将在CETool v2.0实现)。 此程序涉及内容: 此程序涉及到一些Windows和C语言的基础知识,包括文件系统、注册表、进程、线程、窗口、事件、消息、进程间与线程间通信、脚本、动态库、递归、回调、多维指针、函数指针、数据结构、加密算法等。

7,759

社区成员

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

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