使用 ADO 读取所有数据均在一行上的文本文件问: 您好,脚本专家!我有一个固定宽度的文本文件,该文件包含名字(6 个字符)、姓氏(13 个字符)和部门(9 个字符),并且它们均在同一行上。我该如何使用 ADO 来读取呢? -- DW 答: 您好,DW。坦白地讲,我们认为您不能使用 ADO(ActiveX 数据对象)读取这样的文件。ADO 是一种和文本文件进行交互的非常好的方法(有关详细信息,请参阅文章有关文本文件的 ADO 更多知识(英文)),但是,确实,ADO 有些挑剔:它的每项设置都必须完全正确,否则就会拒绝工作。(不像脚本专家,即使所有事情都已准备就绪,他们还是会拒绝工作。)作为一种数据库技术,ADO 需要一个“结构良好”(借用 XML 领域的一个术语)的数据库;它无法直接利用您那样的文件格式并从中产生数据库。(在这种情况下,可以将您的巨行分成若干单个记录。) 但是没关系;毕竟,我们可以使用虽古老但优秀而可靠的 VBScript 来创建结构良好的数据库。我们今天要做的就是向您展示如何快速而便捷地将您的巨大数据字符串分割成单个记录。只需通过将这些单个记录(即,文本文件中的单个记录)回显到屏幕上我们就可以达到目的。不过,您可以将这些记录段写到另一个文本文件然后使用 ADO 从其中读取数据。我们只是帮您开个头,剩下的就要靠您自己了。 首先,我们假定您已拥有一个类似于下面的文本文件,该文件的字段名称和两条记录包含于同一行之上: First Last Dept Ken Meyer Finance Pilar Ackerman HR 我们希望最后的结果同下面的显示更为相似: First Last Dept Ken Meyer Finance Pilar Ackerman HR 这可能吗?当然可能:
复制代码 代码如下:
Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:/Scripts/Test.txt", ForReading) strContents = objFile.ReadAll objFile.Close i = False Do Until i = True intLength = Len(strContents) If intLength < 28 Then Exit Do End If strLines = strLines & Left(strContents, 28) & vbCrLf strContents = Right(strContents, intLength - 28) Loop Wscript.Echo strLines