vba语句_VBA标准文本文件I / O语句

vba语句

似乎在VBA中,一些最基本的文件控制基本命令最难找到任何信息,例如,基本文件操作命令,例如DIR(),CHDRIVE(),CHDIR(),FILECOPY(), NAME(),KILL()和用于处理基本文本输入/输出的命令。

因此,在本文中,我想介绍

文件I / O命令的基础知识

FreeFile,打开,关闭,LOF,SEEK,输入,输入#,行输入,打印,写入,重置和EOF。

将这些命令与字符串函数一起使用可以提供非常有价值的工具集,而无需添加任何库引用或后期绑定对象来使用文件脚本对象。 您可以存档资料,保存设置,脱机错误日志,而且我敢肯定,我们很多人都需要从TXT / CSV文件导入文本。 每个语句都超链接到Microsoft程序员参考站点,以获取更多详细信息……在我撰写本文时,那里还提供了有用的信息:) ...

FreeFile intPointer = FreeFile

打开文件时,它需要一个指针。 FreeFile使您可以找到下一个最低的可用指针。 FreeFile不会随着使用/调用而增加; 因此,在打开或关闭文件之前,返回的结果将是相同的,因此,如果使用#1,#2和#3打开文件并调用FreeFile,则如果您将其调用50次却没有打开,则将返回#4。或关闭文件,则每次都会返回#4。 但是,如果关闭#1,然后调用FreeFile,它将返回#1,并且#2和#3引用的文件将保持打开状态!

打开 Open pathname For mode [ Access access] [lock] As [#]filenumber [ Len =reclength]

基础知识...必须先打开文件,然后才能使用它。

请紧记...您打开INPUT文件

文件程序 程序文件。

FOR模式为:追加,二进制,输入,输出或随机-请记住,除非以随机方式打开,否则每次从文件或输出/ APPEND输入文件时,指针都会向前移动与dbOpenForwardOnly记录集相同。 有关使用随机模式的更多信息

如何使用随机访问文件

锁定模式为:共享,锁定读取,锁定写入和锁定读取写入

Reclength,我很少使用,而与缓冲字节或字符有关,这取决于打开文件的方式。 但是,假设数据位于10000个字符文件的前100个字符中,为什么要打开整个文件。

所以打开文件的基本语法是

Open "C:\in.txt" For Input As intPointer来创建/覆盖文件Open "C:\in.txt" For Append As intPointer的附加来添加到现有文件。 关闭 CLOSE filenumberlist

基础知识,如果您打开它,请关闭它。 您还需要在模式之间关闭文件,因此要从输入变为输出或随机和锁定类型,您需要先关闭文件,然后使用正确的设置重新打开文件。

LOF() intChars = LOF [#]filenumber

返回打开文件中的字符数。

intX= LOF( 1 ) SEEK SEEK [#]filenumber, position

设置打开文件中下一个读/写操作的位置。 请注意此处,否则您将超出文件长度并输出错误-是的,您可以使用此方法将指针移回到文件的开头(与dbOpenReadForwardOnly记录集不同)

Seek #1, NextChar 输入 strImport = INPUT( #Toimport, [#]filenumber )

输入函数将一次将指定数量的字符导入Access。 当您有固定宽度或长度的记录(即,已设置Open语句的Len参数)时,这可能最有用。 再次注意文件长度,否则您将超出文件范围并出错

例如,这将导入您随后可以解析的整个文件,如果您有内存并且正在通过慢速的网络进行读取,则这可能会更有用。

strImportFile = input(len([#]filenumber), [#]filenumber ) 行输入#FileIndex Line Input #filenumber, varname filenumber Line Input #filenumber, varname

按照它说的做,将整行读入变量,然后根据需要拆分。

Line Input #1, strReadLineIn

(注意:这里的语法很重要,“#”符号必须是代码的一部分,因此

Line Input #intIndex, strReadLineIn将起作用,但是Line Input intIndex, strReadLineIn将出错) 打印# Print # filenumber, [outputlist]

好吧,我们需要一种将数据放入文件中的方法。 此方法将信息几乎照原样发送到文件,在输出末尾附加<cr> <lf>。 它不会在内容周围包裹多余的字符,因此是导出到其他程序的更好选择。 因此,如果需要在文件中定界,则需要以字符串格式提供它。 另一个怪癖是,分类为日期的数据将作为系统短日期输出,并将在列表“字段”之间插入空格。

可以包含一系列参数,以帮助进行输出格式设置(请参阅链接)。

不带任何内容将print#发送到文件会插入一个零长度的空字符串(空白行); 但是,如果有一个Null值的变量,它将在行中插入Null字符,然后返回。

链接中有一个示例,最基本的是:

’Simple single line:
Print #1, “This is a single line to the file” ‘you get exactly as shown
‘print a line of information
Print #1,  “a”;”b”;”c”;”d” ‘you get “abcd” on the line
‘two zones
Print #1, “zone1”, “zone 2” ‘ you get “zone 1             zone2” however, if zone1 text is larger then things push
‘two zones – better formatting
Print #1, “zone1”; tab ; “zone 2” ‘ same as above, but with the tab character that you can then use to set the starting column such as tab(10)
‘A trailing “;” semicolon will hold the line for the next print# operation.
Print #1,  “a”;”b”;”c”;”d”;  ‘note the trailing ;
Print #1,  “e”;”f”;”g”;”h” ‘you get “abcdefgh” on the line and a <cr><lf> 
>-<

以下两个相互配合工作,并用双引号引起来。 请注意,任何带有双引号的东西都会对这两种方法/语句产生问题,因为这将在“记录” /行中创建一个新的“元素”。

写# Write # filenumber, [outputlist]

与Print#语句不同:该语句重新格式化并翻译了很多内容,忽略了本地设置,在将项目和字符串之间的引号之间插入逗号(在将它们写入文件时),并添加了<cr> <lf>。 该链接提供了一个很好的例子,说明了如何以及如何获得。 我很少使用此方法,仅将其用于一些“较深”的归档文件,因为必须格外注意数据的格式设置以及嵌入的引号可能使事情变得一团糟。

输入# Input # filenumber, varlist

请注意此处的变量列表……这适用于Write#语句……以及手册中的内容:“这是必需的。 以逗号分隔的变量列表,这些变量分配有从文件中读取的值,不能为数组或对象变量。 但是,可以使用描述数组元素或用户定义类型的元素的变量。” 这些变量也是可转换类型,因此可以将日期分配给日期,将true / false分配给布尔值,等等。

这并不是输入方法中最有用的。 但是,当我使用WRITE#方法编写文件时有时会使用它…通常用于深层存档,如果我真的需要数据,那将是非常糟糕的一天(一周,一个月)。

这是一个方便的命令:

重设

这就是代码,将Reset放在一行上并执行...,然后刷新,保存和关闭您当前打开的每个文件–句号,无提示,仅完成。 在错误事件处理程序或代码的清理部分中拥有一个好东西。

啊,是的,还有一个,

紧急行动

您需要一种测试文件结尾的方法。 因此,从上面的链接借用代码,因为实际上它比示例更简单,通用:

 Dim InputData
Open "MYFILE" For Input As #1    ' Open file for input.
Do While Not EOF(1)    ' Check for end of file.
Line Input #1, InputData    ' Read line of data.
Debug.Print InputData    ' Print to the Immediate window.
Loop
Close #1    ' Close file. 
还有其他文本文件IO命令,例如GET和PUT,用于简单的记录处理。 嗯,是的,那天我曾经在很老的学校里用这些东西来处理“数据库”……然后SQL和真正的数据库引擎对我们来说很少有人可用(很多欣喜之情充斥了整个土地)。

再一次,除非随机打开,否则除非执行SEEK(),否则文件上的每个INPUT / OUTPUT操作通常都会使索引在打开的文件中向前移动。

还有其他一些基本的VBA语句也可以节省您的精力,其中大多数我们经常使用。 但是,有些却少了:

Office Visual Basic语言参考>声明

其中一些仅出于向后兼容性而保留(“错误”),而其他诸如“ Gosub”之类的方法则不受欢迎,并被认为是较差的编程技术。 方便使用的另一个参考是VBA的基本功能:

Office Visual Basic语言参考>功能

这些信息大部分是我们老式BASIC / FORTRAN / COBOL程序员的常识。 我从不同地方借来了一个或两个例子来更改变量,但是,这就像音乐中的C音阶,可以说是C音阶,而且可以说是在公共领域。

翻译自: https://bytes.com/topic/access/insights/953655-vba-standard-text-file-i-o-statements

vba语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值