当前位置:

首页 > 编程开发 > VBS基础篇 - vbscript TextStream对象

VBS基础篇 - vbscript TextStream对象

文本流对象是VBScript操作文本文件的核心工具,通过文件系统对象创建或打开文本文件获取。方法包括写入、读取、读取一行、跳过、关闭,属性行尾、流尾、列、行控制读取位置。示例演示文件创建、读写、跳过。

本文目录

    TextStream 对象是 VBScript 中用来操作文本文件的核心工具,它在 FileSystemObject 体系中扮演着相当重要的角色。简单说,要读写文本文件,就得先拿到这个对象的句柄,而通常我们会通过 FileSystemObject 的 CreateTextFile() 或 OpenTextFile() 方法来完成这一步——相当于先找到文件,再打开一个可供操作的“通道”。

    VBS基础篇 - vbscript TextStream对象

    下面就来逐一拆解 TextStream 对象的方法和属性,看看它们到底能做什么,以及怎么用。

    TextStream 对象的方法

    方法 说明
    Close() 关闭一个打开的文件
    Read(numchars) 从文件中读出 numchars 个字符
    ReadAll() 作为单个字符串读出整个文件
    ReadLine() 作为一个字符串从文件中读出一行(直到回车符和换行)
    Skip(numchars) 当从文件读出时忽略 numchars 个字符
    SkipLine() 当从文件读出时忽略下一行
    Write(string) 向文件写入字符串 string
    WriteLine(string) 向文件写入字符串 string(可选)和换行符
    WriteBlankLines(n) 向文件写入 n 个换行符

    Close、Write、WriteLine 及 WriteBlankLines 的使用

    Close() —— 关闭正在打开的文件,操作完成后记得调用,否则文件可能一直被占用。

    WriteLine(string) —— 写入字符串并自动追加换行符,如果不传参数则只写入一个空行。

    看个完整的例子,创建一个文件并写入内容:

    Dim strPath,strText
    strPath = "C:testing.txt"
    strText = "This is Test !hello word !"
    '调用函数
    Call CreateFile(strPath,strText)
    
    Sub CreateFile(strPath,strText)
      Dim objFso,objStream
      '创建FileSystemObject对象
      Set objFso = CreateObject("Scripting.FileSystemObject")
      '使用CreateTextFile()来返回一个TextStream对象句柄
      Set objStream = objFso.CreateTextFile(strPath,True)
      '三个Write的意思为:写入字符、写入带换行符的字符、写入3个换行符
      objStream.Write(strText)
      objStream.WriteLine(strText)
      objStream.WriteBlankLines 3
      '关闭TextStream对象
      objStream.Close
    End Sub

    Read、ReadAll 及 ReadLine 的使用

    Read(numchars) —— 从当前位置读取指定数量的字符,返回一个字符串。

    ReadAll() —— 一次性读取整个文件内容,返回一个字符串。注意文件很大的时候慎用,容易撑爆内存。

    ReadLine() —— 读取当前行(直到换行符,但不包含换行符本身),返回字符串。

    下面的例子演示了三种读取方式的差异:

    Call CreateFile("c:test.txt", "This is Test !" & vbCrLf & "hello word !")
    
    Sub CreateFile(strPath,strText)
      Dim objFso,objStream
      Set objFso = CreateObject("Scripting.FileSystemObject")
      Set objStream = objFso.CreateTextFile(strPath,True)
      objStream.WriteLine(strText)
      '先读一行
      Msgbox (objStream.ReadLine)
      '重新以只读方式打开,再读取全部
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      Msgbox (objStream.ReadAll)
      '再次打开,只读前9个字符
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      Msgbox (objStream.Read(9))
      objStream.Close
    End Sub

    Skip、SkipLine 的使用

    Skip(numchars) —— 读取时跳过指定数量的字符,相当于跳过前几个“坑位”。

    SkipLine() —— 跳过一整行,直接从下一行开始读取。

    来看如何用这两个方法跳过不想要的内容:

    Dim strPath,strText
    strPath = "C:test.txt"
    Call CreateFile(strPath)
    
    Sub CreateFile(strPath)
      Dim objFso,objStream
      Set objFso = CreateObject("Scripting.FileSystemObject")
      Set objStream = objFso.CreateTextFile(strPath,True)
      objStream.Write "This is Test !" & vbCrLf & "hello word !"
      '以只读方式打开
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      objStream.Skip(5)
      Msgbox objStream.ReadAll
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      objStream.SkipLine
      Msgbox objStream.ReadAll
      objStream.Close
    End Sub

    TextStream 对象的属性

    属性 说明
    AtEndOfLine 如果文件位置指针在文件中一行的末尾则返回 True
    AtEndOfStream 如果文件位置指针在文件的末尾则返回 True
    Column 从 1 开始返回文件中当前字符的列号
    Line 从 1 开始返回文件中当前行的行号

    AtEndOfLine 与 AtEndOfStream 的区别

    这两个属性经常用于循环控制,但容易混淆。简单总结:

    AtEndOfLine 表示当前指针是否已经到达当前行的末尾(注意是“行”的末尾,不是文件末尾)。

    AtEndOfStream 则表示是否已经到达整个文件的末尾。

    下面的例子分别用这两个条件来逐字符读取文件,对比一下效果:

    Dim strPath,strText
    strPath = "C:test.txt"
    Call CreateFile(strPath)
    
    Sub CreateFile(strPath)
      Dim objFso,objStream,str
      Set objFso = CreateObject("Scripting.FileSystemObject")
      '以只读方式打开,如果文件不存在则创建
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      '如果不在行末,逐个字符读取
      Do While objStream.AtEndOfLine <> true
        str = str + objStream.Read(1)
      Loop
      msgbox str
      str = ""
      Set objStream = objFso.OpenTextFile(strPath,1,true)
      '如果不在文件末尾,逐个字符读取
      Do While objStream.AtEndOfStream <> true
        str = str + objStream.Read(1)
      Loop
      MsgBox str
      objStream.Close
    End Sub

    Column 与 Line 的使用

    Column 返回当前字符的列号(从1开始),Line 返回当前行的行号(也是从1开始)。读取完整个文件后,可以用它们来获取文件的总行数以及最后一列的列号。

    Call TestTextStream("c:test.txt")
    
    Sub TestTextStream(strPath)
      Dim objFso,objTStream,str
      Set objFso = CreateObject("Scripting.FileSystemObject")
      Set objTStream = objFso.OpenTextFile(strPath,1)
      Do While objTStream.AtEndOfStream <> true
        objTStream.ReadAll
        str = str + "共有" & objTStream.Line & "行数据,光标最后所在列号为:" & objTStream.Column & vbCrLf
      Loop
      MsgBox str
    End Sub

    实战:文本读取的几个常见需求

    如何读取文本最后一行数据?

    一个很典型的场景:日志文件需要取最后一行。循环读取直到文件末尾,最后一行的值自然就留下了。

    Dim Fso,MyFile
    Dim strLine
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = Fso.OpenTextFile("C:test.txt",1)
    Do Until MyFile.AtEndOfStream
      strLine = MyFile.ReadLine
    Loop
    MyFile.Close
    MsgBox strLine

    如果文件末尾有空行怎么办?

    上面的方法在文件末尾有空行时会返回空字符串(空行)。改进的办法:只记录非空的行。

    Dim Fso,MyFile
    Dim strLine
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = Fso.OpenTextFile("C:test.txt",1)
    Do Until MyFile.AtEndOfStream
      strNextLine = MyFile.ReadLine
      If Len(strNextLine) > 0 Then
        strLine = strNextLine
      End If
    Loop
    MyFile.Close
    MsgBox strLine

    读取文本指定行内容

    我们知道行号之后,可以用计数的方式精准定位——每读一行减1,减到0就说明到达目标行,直接退出函数。

    MsgBox TestTextStream("c:test.txt",1)
    
    Function TestTextStream(strPath,IntLine)
      Dim Fso,MyFile
      Set Fso = CreateObject("Scripting.FileSystemObject")
      Set MyFile = Fso.OpenTextFile(strPath,1)
      Do Until MyFile.AtEndOfStream
        TestTextStream = MyFile.ReadLine
        IntLine = IntLine - 1
        If IntLine = 0 Then
          Exit Function
        End If
      Loop
    End Function

    以上就是 TextStream 对象从方法到属性的完整梳理,配合几个典型需求的代码,基本能覆盖日常文件读写的所有场景了。实际使用时,记得留意文件路径的合法性以及读写权限,否则会抛出运行时错误。如果有什么遗漏的地方,欢迎在实践中补充。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 vbs
    相关文章 更多
    vbs 文件操作集合代码
    vbs 文件操作集合代码

    VBS脚本实现文件批量处理:一脚本从配置文件读取关键字,遍历文件夹内容,匹配后重命名添加.bak后缀并记日志;另一脚本根据文件路径列表,对衍生文件批量重命名添加.tmp后缀。

    VBS Shell.Application中ShellExecute的使用方法详解
    VBS Shell.Application中ShellExecute的使用方法详解

    VBS调用Shell.Application的ShellExecute方法时需先创建对象。参数包括文件名、附加参数、目录、操作和窗口类型。操作包括编辑、查找、打开、打印、属性、以管理员身份运行六种,窗口类型用0至10数值控制。实战示例以管理员权限运行cmd.exe添加用户。

    VBS字符串编码转换函数代码
    VBS字符串编码转换函数代码

    利用ADODB.Stream对象,VBScript可实现字符串编码转换。核心思路是先将字符串按源编码转为二进制字节流,再按目标编码还原。提供StringToBytes、BytesToString和AlterCharset三个函数,支持GB2312与ISO-8859-1等单字节编码间的转换,适用于旧系统或硬件交互场景。

    VBS 批量Ping的项目实现
    VBS 批量Ping的项目实现

    通过WMI调用Win32_PingStatus实现批量Ping检测,支持循环监测与断线计数。连续失败10次自动发送邮件告警,日志和控制台同步输出。需CScript环境运行,脚本已自动处理切换,适用于多IP持续监控场景。

    抖音很火的vbs表白代码(简单实用!)
    抖音很火的vbs表白代码(简单实用!)

    利用VBS脚本制作循环表白弹窗,点击“否”时依次显示“女友最大”“工资上交”等六个承诺,点击“是”则展现字符爱心与浪漫告白。操作需新建文本文档,粘贴代码后另存为ANSI编码的.vbs文件,双击运行即可。

    vbs实现web自动登录网站的方法
    vbs实现web自动登录网站的方法

    利用VBS脚本通过InternetExplorer.Application对象操控网页,自动填写账号密码并提交,实现开机自动登录网站。需根据实际页面修改网址、表单及输入框的name属性。将脚本放入系统启动文件夹即可开机自启。

    VBS入门篇之带你领略脚本语言的快乐
    VBS入门篇之带你领略脚本语言的快乐

    VBS是Windows内置脚本语言,无需安装环境,用记事本即可编写。通过Msgbox和Inputbox函数实现弹窗输出与交互。编写时需注意:文件后缀为.vbs,符号使用英文半角,编码格式改为ANSI,否则中文可能乱码。

    VBS脚本基础语法实例讲解
    VBS脚本基础语法实例讲解

    VBS脚本基础语法涵盖变量定义、输入输出、判断与循环语句。变量可用“dim”声明,支持自动类型推断;输入输出分别通过inputbox和msgbox实现;判断语句以if...then...else...endif结构为主;循环包括do-loop(支持until、while条件及exitdo控制)和for-next结构。

    如何用VBS脚本收集远程计算机或本地计算机安装的软件
    如何用VBS脚本收集远程计算机或本地计算机安装的软件

    使用VBS脚本可收集域内远程或本地计算机的软件及Windows版本信息,结果保存为以计算机名命名的txt文件,支持网络路径或脚本目录。脚本内置过滤规则,自动剔除补丁包、Office组件及NVIDIA、Intel驱动等系统组件,兼容32位和64位系统。

    ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD
    ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD

    VBS脚本在64位系统中因默认调用64位WScript.exe导致32位ActiveX组件无法创建,出现800A01AD错误。可通过修改注册表将解释器切换为32位版本,或直接更改脚本打开方式为SysWOW64下的wscript.exe解决。若在ASP环境中,可重新注册ADODB.Stream组件或启用IIS应用程序池的32位模式。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。