2013-10-15 2 views
6

FileSystemObject 메서드를 사용하여 텍스트 파일의 특정 줄을 찾고 해당 줄 내에서 특정 문자열을 바꿔 봅니다. 나는 현재 비교적 익숙하지 않은데, 현재 코드가 텍스트 파일을 여는 데 탁월한 능력을 발휘하고 내가 필요로하는 것을 바꿔서 저장하고 닫는다. 이 방법은 더 이상 옵션이 아닙니다. 텍스트 파일을 여는 데 시간이 오래 걸리므로 파일을 보관할 수 있습니다.VBA에서 FileSystemObject를 사용하여 텍스트 파일의 줄에 문자열을 바꾸려면 어떻게해야합니까?

이것은 지금까지 내가 지금까지 얻은 것입니다.

-

Sub FindLines() 

Const ForReading = 1 

Set FSO = CreateObject("Scripting.FileSystemObject") 

Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", ForReading,  False) 

Do Until objFSO.AtEndOfStream = True 

    go = objFSO.ReadLine 

    If InStr(1, go, "ant", vbTextCompare) > 0 Then 

     bo = Replace(go, "t", "wow") 

    End If 

Loop 

objFSO.Close 

Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", 2) 

End Sub 

-

내가 할 수있는 최선가 작성하는 최대 파일 열기,하지만 난 어떻게 선을 찾아 내가 필요 라인으로 교체하는 아무 생각이 없다 그것으로 대체하십시오.

올바른 방향으로 나를 도와주고 싶다면 더 많은 정보가 필요하면 알려주십시오. 나는 많은 것을 수색하고 사람들이 이것을하는 다른 방법을 제안하는 것을 보았다. 이 방법으로 줄을 편집하는 방법을 배워야합니다. 누군가 나를 도울 수 있습니까?

미리 감사드립니다.

-Anthony C.

+0

호기심에서 벗어나서 왜 단어 나 다른 텍스트 리더가 아닌가? –

+0

그것이 내가 원래 가르쳐 준 것이기 때문에 나는 Excel을 사용하고있었습니다. VBA 코드는 많은 사용자가 사용하는 파일에 있으므로 이러한 파일/폴더를 열거 나 닫음으로써이 파일 중 10 개를 읽거나 쓰면 너무 많은 오류가 발생합니다. 파일을 열고 닫는 것보다 빠른 것이 필요합니다. – aCarella

답변

9

이 가장 효율적인 방법입니다하지만 하나의 생각은 당신이 쓸 수있는 다른 파일을 만들려면 FileSystemObjectCreateTextFile 방법을 사용하는 것입니다 확실하지.

이 파일은 작은 파일로 테스트했으며 예상대로 작동하는 것 같습니다.

대답은 당신이 "원래"제거 할 것인지 여부에 따라 다음 .ReadLine.WriteLine 루프

Sub FindLines() 
'Declare ALL of your variables :) 
Const ForReading = 1 ' 
Const fileToRead As String = "C:\Users\david_zemens\Desktop\test.txt" ' the path of the file to read 
Const fileToWrite As String = "C:\Users\david_zemens\Desktop\test_NEW.txt" ' the path of a new file 
Dim FSO As Object 
Dim readFile As Object 'the file you will READ 
Dim writeFile As Object 'the file you will CREATE 
Dim repLine As Variant 'the array of lines you will WRITE 
Dim ln As Variant 
Dim l As Long 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set readFile = FSO.OpenTextFile(fileToRead, ForReading, False) 
Set writeFile = FSO.CreateTextFile(fileToWrite, True, False) 

'# Read entire file into an array & close it 
repLine = Split(readFile.ReadAll, vbNewLine) 
readFile.Close 

'# iterate the array and do the replacement line by line 
For Each ln In repLine 
    ln = IIf(InStr(1, ln, "ant", vbTextCompare) > 0, Replace(ln, "t", "wow"), ln) 
    repLine(l) = ln 
    l = l + 1 
Next 

'# Write to the array items to the file 
writeFile.Write Join(repLine, vbNewLine) 
writeFile.Close 

'# clean up 
Set readFile = Nothing 
Set writeFile = Nothing 
Set FSO = Nothing 

End Sub 

을 피하기 위해 접수 후 할 수있는 파일을 수정 뭔가 같은 :

'# clean up 
Set readFile = Nothing 
Set writeFile = Nothing 
'# Get rid of the "old" file and replace/rename it with only the new one 
Kill fileToRead 
Name fileToWrite As fileToRead 
End Sub 
+0

+ 1 멋지게 완료되었습니다. –

+0

정말 고마워요. 나는 이것을 전에 사용하는 것을 보았지만 결코 명확하게 설명되지 않았습니다. 나는 이것을 분명히 시험해보고 결과를 게시 할 것입니다. – aCarella

+0

방금 ​​테스트 한 결과 완벽하게 작동했습니다. 정말 고맙습니다. – aCarella

5

여기에 비해 훨씬 빠르고 더 짧은 방법입니다.

Sub Sample() 
    Dim MyData As String, strData() As String 

    '~~> Read the file in one go! 
    Open "C:\Users\Carella Home\Desktop\boomboom.txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 
End Sub 

모든 텍스트 파일 데이터가 배열 strData에 있습니다. 배열을 반복하고 바꾸고 싶은 텍스트를 찾아서 SAME 파일에 다시 쓰십시오.

+0

필자는이 방법을 사용한 적이 있지만 filesystemobject를 통해 파일을 참조하도록 제안했지만 결코 설명되지 않았습니다. 나는 문법을 찾아보고 내가 얼마나 고를 수 있는지 보게 될 것이다. 파일 시스템을 통해 내 파일을 이미 추가 했으므로 파일을 편집하는 데 더 좋은 방법이라고 생각했습니다. 나는 그것을 조사 할 것이다. 답변 해 주셔서 감사합니다. – aCarella

+0

나는 이것에 익숙하지 않다. 이 방법을 시도 할 때 참조 할 것이 없습니다. 그러나 이것이 왜 더 효율적인지 궁금합니다. 이것은 무엇이라고 불 립니 까? 답장에 입력 한 모든 것을 사용하는 방법을 배우려면 무엇을 검색 할 것인지 올바른 방향으로 가르쳐 주시겠습니까? 고맙습니다! – aCarella

+2

이유는 매우 간단합니다. 텍스트 파일의 모든 행을 반복하지 않기 때문에이 방법이 더 빠릅니다. 당신이하고있는 일은 전체 텍스트 파일을 배열에 (메모리에) 한 번에로드 한 다음 그 배열에 대한 연산을 수행하는 것입니다. –

관련 문제