2012-10-31 3 views
5

줄 단위로 텍스트를 읽도록 vbscript를 만드는 데 문제가 있습니다. 이 코드가 수행해야하는 단계입니다 :줄 단위로 txt 파일 읽기

  1. 읽기
  2. 열기 folder.txt에 나열된 파일을 folder.txt
  3. 에코있는 test.txt
  4. 읽기 폴더 목록의 내부 내용을 표시합니다.
  5. 폴더를 열어-List.txt 파일에 나열된 파일 TXT
  6. 라인으로
  7. 열기 dirlist.txt 및 에코 라인

folder.txt에 포함 된 내용의 예 :

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 파일의 예에는 다음이 포함

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이

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 코드입니다.

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를 읽을 수는 없습니다. 어떤 해결책이 있습니까?

답변

15

Set listFile = fso.OpenTextFile(aniLines).ReadAll 

두 가지 이유에 대해 작동하지 않습니다 라인 : 변수 객체를 할당하지만, 문자열ReadAll 반환 할 때

  • Set 만 사용할 수 있습니다.
  • OpenTextFile()은 문자열을 예상하지만 aniLines배열 문자열입니다.

배열의 모든 요소를 ​​처리하려면이 같은 것을 사용할 수 있습니다

For Each line In aniLines 
    ' read dirlist.txt file 
Next 

문제는 당신이 dirlist.txt 파일을 읽고 싶은 방법이다. 당신은 당신이 다른 파일처럼 동일한 기능을 수행 할 수 있습니다 : 파일의 전체 내용을 읽어 배열로 분할 :

listFile = fso.OpenTextFile(line).ReadAll 
listLines = Split(listFile, vbCrLf) 

다음 배열의 필드를 처리하기 위해 위와 같은 다른 루프를 사용하여 listLines. 코드가 더 간단하기 때문에이 방법은 작은 파일에 대해서는 더 바람직합니다.

또는 (용량이 큰 파일을 처리 할 때 메모리 소모 피할 수 있기 때문에,보다 더 낫다 인) 당신은 ReadLine 방법을 사용할 수 있습니다 내가 대신 Do While NotDo Until를 사용하는 것이 좋습니다

Set listFile = fso.OpenTextFile(line) ' <-- remove .ReadAll from this line! 
Do Until listFile.AtEndOfStream 
    fName = listFile.ReadLine 
    ' do stuff with fName 
Loop 

을 의미가 있기 때문에, 똑같지 만 전자는 자연 언어에 가깝기 때문에 읽기가 더 쉽습니다.

또한 스크립트의 시작 부분에서 FileSystemObject 개체를 인스턴스화하고 나머지 스크립트에서 해당 인스턴스를 사용하는 것으로 충분합니다. 반복적으로 인스턴스화하는 것은 의미가 없습니다.

+2

+1, 나는'ReadLine'을 사용하는 것이 더 간단 할 것이지만'ReadAll'과'Split'combo를 사용하는 것이 좋습니다. –