ZetCode

VBScript Line 属性

最后修改于 2025 年 4 月 9 日

VBScript 中的 Line 属性是 TextStream 对象的一部分。它返回正在读取的文本文件中的当前行号。此属性是只读的,并且在读取行时会自动递增。它通常用于跟踪文件处理操作的进度。

打开文件时,Line 开始从 1 计数。它在文件操作期间提供了有价值的调试信息。本教程通过实际示例介绍了 Line 属性,以演示其在各种场景下的用法。

Line 属性概述

Line 属性属于通过 FileSystemObject 创建的 TextStream 对象。它返回一个表示当前行位置的长整型。在每次读取行操作后,计数器会递增。

主要特点包括自动行计数和只读访问。它不影响文件读取操作。Line 属性同时适用于顺序和随机文件访问。理解此属性有助于创建健壮的文件处理脚本。

基本行计数

此示例演示了 Line 属性最简单的用法,用于跟踪读取进度。它显示了该属性如何自动递增。脚本在显示当前行号的同时读取文件。

basic_line_counting.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\data\log.txt", 1) ' 1 = ForReading

Do Until file.AtEndOfStream
    lineText = file.ReadLine()
    WScript.Echo "Line " & file.Line & ": " & lineText
Loop

file.Close
Set fso = Nothing

该脚本打开一个文本文件并逐行读取。每次迭代都会显示当前行号和内容。Line 属性在每次调用 ReadLine 后从 1 开始并递增。这提供了实时的进度反馈。

带行号的错误报告

此示例展示了如何使用 Line 属性进行数据文件的错误报告。它演示了在跟踪行号的同时验证文件内容。可以报告带有精确行引用的无效数据。

error_reporting.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\data\values.csv", 1)

Do Until file.AtEndOfStream
    lineText = file.ReadLine()
    If Not IsNumeric(lineText) Then
        WScript.Echo "Error in line " & file.Line & ": Not a number"
    End If
Loop

file.Close
Set fso = Nothing

该脚本检查每行是否包含数字数据。非数字行会触发带有行号的错误消息。Line 属性有助于查明数据质量问题。这种方法对于数据验证脚本非常有用。

使用进度处理大文件

此示例演示了如何使用 Line 属性在处理大文件时显示进度。它会定期输出进度。该脚本有助于监控长时间运行的文件操作。

large_file_progress.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\data\bigfile.txt", 1)
totalLines = 0

Do Until file.AtEndOfStream
    file.ReadLine()
    totalLines = totalLines + 1
    
    If totalLines Mod 1000 = 0 Then
        WScript.Echo "Processed " & totalLines & " lines..."
    End If
Loop

WScript.Echo "Total lines processed: " & totalLines
file.Close
Set fso = Nothing

该脚本计算大文件中的所有行。它每 1000 行报告一次进度。Line 属性可以取代此处的手动计数器。此技术有助于监控长时间运行的文件处理任务。

比较 Line 属性和手动计数

此示例比较了 Line 属性和手动行计数。它同时显示了两种方法的运行情况。该脚本演示了它们相同的行为。

compare_counting.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\data\sample.txt", 1)
manualCount = 0

Do Until file.AtEndOfStream
    lineText = file.ReadLine()
    manualCount = manualCount + 1
    
    WScript.Echo "Manual: " & manualCount & ", Property: " & file.Line
Loop

file.Close
Set fso = Nothing

该脚本显示两种计数方法产生相同的结果。Line 属性消除了对手动计数器的需求。此示例验证了该属性的可靠性。使用内置属性可以降低代码的复杂性。

写入操作中的行计数

此示例探讨了 Line 属性在文件写入期间的行为。它显示了该属性在写入模式下的不同工作方式。该脚本演示了在输出操作期间的行计数。

write_operations.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile("C:\data\output.txt", True) ' True = Overwrite

file.WriteLine "First line"
WScript.Echo "After write 1: " & file.Line

file.WriteLine "Second line"
WScript.Echo "After write 2: " & file.Line

file.Close
Set fso = Nothing

该脚本创建一个新文件并写入两行。Line 属性反映了要写入的下一行号。与读取不同,它在写入操作之前递增。这种行为对于写入跟踪场景很重要。

来源

TextStream 对象文档

在本文中,我们探讨了 VBScript 中的 Line 属性,涵盖了其用法和实际应用。从简单的行计数到复杂的文件处理,这些示例演示了可靠的行跟踪。有了这些知识,您就可以使用精确的行位置信息来增强文件处理脚本。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有多年的编程经验。我自 2007 年以来一直在撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有八年以上的经验。

列出所有 VBScript 教程