ZetCode

VBScript AtEndOfLine 属性

最后修改于 2025 年 4 月 9 日

VBScript 中的 AtEndOfLine 属性是 TextStream 对象的一部分。它指示文件指针是否已到达文本文件中的行尾。此属性是只读的,返回 True 或 False。它对于逐行或逐字符读取文本文件至关重要。

AtEndOfLine 有助于精确控制文件读取操作。它与 TextStream 对象的 ReadReadLine 等方法配合使用。本教程通过实际示例涵盖 AtEndOfLine 以演示其用法。

AtEndOfLine 属性概述

AtEndOfLine 属性检查文件指针是否位于行尾。仅当指针到达行终止符时,它才返回 True。该属性与为读取而打开的 TextStream 对象一起使用。

主要功能包括在顺序文件读取期间检测行尾。它不会移动文件指针或修改文件。AtEndOfLine 有助于精确控制文本文件的处理。理解此属性对于文本文件操作至关重要。

使用 AtEndOfLine 进行基本文件读取

本示例演示了 AtEndOfLine 逐字符读取文本文件的最简单用法。它展示了属性在遇到行尾时如何变化。脚本读取直到第一行的末尾。

basic_ateol.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("test.txt", 1) ' 1 = ForReading

Do Until file.AtEndOfLine
    char = file.Read(1)
    WScript.Echo char
Loop

file.Close
Set fso = Nothing

脚本打开 "test.txt" 进行读取,并一次读取一个字符。循环继续,直到 AtEndOfLine 变为 True。每个字符都会回显到输出。这演示了基本的行尾检测。

使用 AtEndOfLine 处理多行

本示例展示了如何同时使用 AtEndOfLineAtEndOfStream 来处理整个文件。它逐字符读取每一行,同时跟踪行尾。脚本处理文本文件中的多行。

multiline_ateol.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("data.txt", 1)

Do Until file.AtEndOfStream
    Do Until file.AtEndOfLine
        char = file.Read(1)
        WScript.Echo "Char: " & char
    Loop
    WScript.Echo "End of line reached"
    file.SkipLine ' Move to next line
Loop

file.Close
Set fso = Nothing

外部循环检查文件末尾,而内部循环检查行末尾。每个字符都会单独处理。当一行结束时,会显示一条消息。SkipLine 会移到下一行。

计算每行的字符数

本示例使用 AtEndOfLine 来计算文件中每行的字符数。它演示了该属性的实际文件分析。脚本跟踪行号及其各自的长度。

count_chars.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("document.txt", 1)
lineNum = 1

Do Until file.AtEndOfStream
    charCount = 0
    Do Until file.AtEndOfLine
        file.Read(1)
        charCount = charCount + 1
    Loop
    WScript.Echo "Line " & lineNum & ": " & charCount & " characters"
    lineNum = lineNum + 1
    file.SkipLine
Loop

file.Close
Set fso = Nothing

脚本逐行读取,而不存储字符。它为读取的每个字符递增一个计数器。每行之后,它会报告行号和字符数。这展示了如何使用 AtEndOfLine 进行分析。

使用 AtEndOfLine 进行自定义行处理

本示例演示了使用 AtEndOfLine 进行自定义行处理。它读取行,但以不同的方式处理特定字符。脚本在读取时将元音转换为大写。

custom_processing.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("input.txt", 1)
output = ""

Do Until file.AtEndOfStream
    Do Until file.AtEndOfLine
        char = file.Read(1)
        If InStr("aeiou", LCase(char)) > 0 Then
            output = output & UCase(char)
        Else
            output = output & char
        End If
    Loop
    output = output & vbCrLf ' Add line break
    file.SkipLine
Loop

WScript.Echo output
file.Close
Set fso = Nothing

脚本读取每个字符并检查它是否是元音。输出中的元音会转换为大写。其他字符保持不变。AtEndOfLine 控制内部读取循环。修改后的文本在输出变量中构建。

使用 AtEndOfLine 读取固定宽度字段

本示例展示了如何使用 AtEndOfLine 读取固定宽度字段。它以特定长度的片段处理每一行。脚本演示了结构化文件解析。

fixed_width.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("records.txt", 1)

Do Until file.AtEndOfStream
    field1 = file.Read(10) ' First 10 chars
    field2 = file.Read(15) ' Next 15 chars
    field3 = file.Read(5)  ' Next 5 chars
    
    WScript.Echo "Field 1: " & Trim(field1)
    WScript.Echo "Field 2: " & Trim(field2)
    WScript.Echo "Field 3: " & Trim(field3)
    
    ' Skip remaining characters in line if any
    Do Until file.AtEndOfLine
        file.Read(1)
    Loop
    file.SkipLine
Loop

file.Close
Set fso = Nothing

脚本为每个字段读取特定的字符数。它使用 AtEndOfLine 来处理可变长度的行。字段会进行修剪以删除多余的空格。此方法对于固定格式数据文件很有用。内部循环确保正确处理行终止。

来源

TextStream 对象文档

在本文中,我们探讨了 VBScript 中的 AtEndOfLine 属性,涵盖了它的用法和实际应用。从基本的文件读取到复杂的文本处理,这些示例展示了精确的行处理。有了这些知识,您就可以通过更好的控制来增强文件处理脚本。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有多年的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面有八年以上的经验。

列出所有 VBScript 教程