005集——seek函数及get函数的应用——vba

2024-02-09 17:44
文章标签 函数 应用 get 005 vba seek

本文主要是介绍005集——seek函数及get函数的应用——vba,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:此文章为上一篇文章的延续补充,了解本文的实例应用请看上篇文章

☛(004集——Put 语句将一个变量的数据写入磁盘文件中(VBA)-CSDN博客  https://blog.csdn.net/yongshiqq/article/details/136085866?spm=1001.2014.3001.5502)

Seek 函数

      

返回一个 Long,在 Open 语句打开的文件中指定当前的读/写位置。

语法

Seek(filenumber)

必要的 filenumber 参数是一个包含有效文件号的 Integer。

说明

Seek 函数返回介于 1 和 2,147,483,647(相当于 2^31 – 1)之间的值。

对各种文件访问方式的返回值如下:

方式返回值
Random下一个读出或写入的记录号。
Binary,
Output,
Append,
Input
下一个操作将要发生时所在的字节位置。文件中的第一个字节位于位置 1,第二个字节位于位置 2,依此类推。

Seek 语句

      

Open 语句打开的文件中,设置下一个读/写操作的位置。

语法

Seek [#]filenumber, position

Seek 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
position必要。介于 1 – 2,147,483,647 之间的数字,指出下一个读写操作将要发生的位置。

说明

GetPut 语句中指定的记录号将覆盖由 Seek 语句指定的文件位置。

若在文件结尾之后进行 Seek 操作,则进行文件写入的操作会把文件扩大。如果试图对一个位置为负数或零的文件进行 Seek 操作,则会导致错误发生。

 

Get 语句

      

将一个已打开的磁盘文件读入一个变量之中。

语法

Get [#]filenumber, [recnumber], varname

Get 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
recnumber可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表示在此处开始读出数据。
varname必要。一个有效的变量名,将读出的数据放入其中。

说明

通常用 Put Get 读出的数据写入一个文件

文件中第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。若省略 recnumber,则会读出紧随上一个 GetPut 语句之后的下一个记录或字节(或读出最后一个 Seek 函数指出的记录或字节)。所有用于分界的逗号都必须罗列出来,例如:

Get #4,,FileBuffer

下列规则适用于以 Random 方式打开的文件:

  • 如果要读出的数据的长度小于 Open 语句的 Len 子句中所指定的长度,Get 会在某个边界之内读出随后的记录,在这里,边界的长度等于记录的长度。将此文件缓冲区内的现有内容填入到一个空间之内,该空间介于一个记录的结尾与下一个记录的开头之间。因为无法确定填入的数据量,所以,应设法使记录的长度与读出的数据长度一致,这通常是个好办法。


     
  • 如果读出的变量是一个可变长度字符串,则 Get 语句先读出一个含有字符串长度的双字节描述符,然后读出放入变量中的数据。所以,Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多两个字节。


     
  • 如果读出的变量是一个数值类型的 Variant,则 Get 先读出两个字节,识别 Variant VarType,然后读出放入此变量中的数据。例如,在读出 VarType 3 的 Variant 时,Get 读出六个字节:前两个字节说明 Variant VarType 3 (Long),后四个字节则包含 Long 类型数据。Open 语句中的 Len 子句所指定的记录长度必须至少比储存变量所需的实际长度多两个字节。

    注意 可以使用 Get 语句从磁盘中读出一个 Variant 数组,但不能使用它读出包含数组的标量 Variant。也不能使用 Get 从磁盘中读出对象。

  • 如果读出的变量是 VarType 8 (String) 的 Variant,则 Get 先读出两个字节,识别 VarType,接下来的两个字节指出字符串的长度,然后读出字符串数据。Open 语句中的 Len 子句所指定的记录长度必须比实际字符串的长度至少多四个字节。


     
  • 如果读出的变量是一个动态数组,则 Get 会读出一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。读出数组数据和数组描述符就需要占据字节,而 Open 语句中的 Len 子句所指定的记录长度必须大于或等於这些字节数的总和。 例如,在将数组写入磁盘时,下列数组声明需要 118 个字节:
    Dim MyArray(1 To 5,1 To 10) As Integer
    

    这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。

  • 如果读出的变量是一个大小固定的数组,则 Get 只读出数据。它不读出描述符。


     
  • 如果读出的变量是任何其他类型的变量(不是可变长度的字符串或 Variant),则 Get 只读出变量数据。Open 语句中的 Len 子句所指定的记录长度必须大于或等於要读出的数据的长度。


     
  • Get 在读出用户定义类型的元素时,好象是单独地读出每一个元素,只是不在元素之间进行填充。在磁盘上,(用 Put 写入的)用户定义的类型的动态数组之前有一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensionsOpen 语句中的 Len 子句所指定的记录长度必须大于或等於读出个别元素(包括任何数组及其描述符在内)所需的全部字节数总和。

对于以 Binary 方式打开的文件,Random 的所有规则都适用,但以下情况除外:

  • Open 语句中的 Len 子句不起作用时,Get 连续从磁盘中读出所有变量;也就是说,两个记录之间没有任何填充。


     
  • 对于任何不属于用户定义的类型的数组,Get 只读出数据。它不会读出描述符。


     
  • Get 读出可变长度字符串,不管这些字符串是否具有长度为 2 字节的描述符,它们都不是用户定义的类型的元素。所读出的字节数等於字符串已包含的字符数。例如,下列语句从文件号为 1 的文件中读出十个字节:
    VarString = String(10, )
    Get #1,,VarString
    

 

这篇关于005集——seek函数及get函数的应用——vba的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694890

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝