首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >逐行读取txt文件

逐行读取txt文件
EN

Stack Overflow用户
提问于 2012-10-31 00:45:20
回答 1查看 76.2K关注 0票数 5

我很难让vbscript逐行读取文本。这是代码应该执行的步骤:

  1. 读取folder.txt
  2. 打开folder.txt中列出的文件
  3. 回显test.txt中的内容
  4. 读取文件夹-list.txt
  5. 打开文件夹中列出的文件-list.txt
  6. 逐行打开dirlist.txt和回波

folder.txt包含的内容的一个示例:

代码语言:javascript
运行
复制
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\test.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[12CUT] _____ (Gakkou no Kaidan) [518382]\test.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[2____] _____!__CD__________ [521206]\test.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[Ability] _____________________ [514182]\test.txt

关于哪个文件夹的示例-list.txt包含:

代码语言:javascript
运行
复制
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\dirlist.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[12CUT] _____ (Gakkou no Kaidan) [518382]\dirlist.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[2____] _____!__CD__________ [521206]\dirlist.txt
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[Ability] _____________________ [514182]\dirlist.txt

每个dirlist.txt包含哪些内容的示例

代码语言:javascript
运行
复制
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\00.jpg
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\a_01.jpg
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\a_02.jpg
C:\Documents and Settings\Administrator\Desktop\ArtistCG\[ Go! Go! Heaven!!]_____________25 -______ ___- [525067]\a_03.jpg

这是vbscript代码

代码语言:javascript
运行
复制
Option Explicit

Dim objFSO, strTextFile, strData, strLine, arrLines, aniTextFile, aniData, aniLines, meLine, objTextFile, fso, inputFileList, sFolderName, fname
Dim iim1, iret, iret2, iret3, i
CONST ForReading = 1

strTextFile = "C:\Documents and Settings\Administrator\Desktop\ArtistCG\folder.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
strData = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
arrLines = Split(strData,vbCrLf)

For Each strLine in arrLines
  strData = objFSO.OpenTextFile(strLine,ForReading).ReadAll
WScript.Echo strData

aniTextFile = "C:\Documents and Settings\Administrator\Desktop\ArtistCG\folder-list.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
aniData = objFSO.OpenTextFile(aniTextFile,ForReading).ReadAll
aniLines = Split(aniData,vbCrLf)

Set fso = CreateObject("Scripting.FileSystemObject")
Set listFile = fso.OpenTextFile(aniLines).ReadAll
do while not listFile.AtEndOfStream 
    fName =  listFile.ReadLine()
    WScript.Echo fName
    Loop
Next

到目前为止,我只完成了第1至第4步的工作,但无法阅读dirlist.txt。这里有什么解决办法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2012-10-31 02:42:11

线

代码语言:javascript
运行
复制
Set listFile = fso.OpenTextFile(aniLines).ReadAll

不起作用的原因有两个:

  • Set只能在将对象赋值给变量时使用,但是ReadAll返回一个字符串。
  • OpenTextFile()需要一个字符串,但是aniLines是一个字符串数组。

要处理数组的所有元素,可以使用以下内容:

代码语言:javascript
运行
复制
For Each line In aniLines
  ' read dirlist.txt file
Next

问题是如何读取dirlist.txt文件。您可以对其他文件执行相同的操作:读取文件的全部内容并将其拆分为数组:

代码语言:javascript
运行
复制
listFile  = fso.OpenTextFile(line).ReadAll
listLines = Split(listFile, vbCrLf)

然后使用像上面这样的另一个循环来处理数组listLines的字段。这种方法更适合于小文件,因为代码更简单。

或者您可以使用ReadLine方法(当您必须处理大型文件时,这种方法更好,因为它避免了内存耗尽):

代码语言:javascript
运行
复制
Set listFile = fso.OpenTextFile(line)  ' <-- remove .ReadAll from this line!
Do Until listFile.AtEndOfStream
  fName = listFile.ReadLine
  ' do stuff with fName
Loop

我建议使用Do Until而不是Do While Not,因为语义是相同的,但是前者更接近于自然语言,因此更容易阅读。

另外,只需在脚本的开头实例化一次FileSystemObject对象,并在脚本的其余部分中使用该实例即可。一遍又一遍地实例化它是没有意义的。

票数 15
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13149698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档