2009-06-02 5 views
15

텍스트 파일의 줄을 읽는 Microsoft Office Word 2003에서이 매크로 코드가 있습니다. 각 줄은 코드에서 나중에 사용해야하는 문자열 값을 나타냅니다.텍스트 파일에서 줄을 읽지 만 처음 두 줄은 건너 뜁니다.

그러나 텍스트 파일의 처음 두 줄에는 내가 필요없는 것들이 포함되어 있습니다. 코드를 수정하여 첫 번째 두 줄을 건너 뛸 수 있습니까? Word에서 VBA 편집기의 "인텔리는"코드는이

Dim sFileName As String 
Dim iFileNum As Integer 
Dim sBuf As String 
Dim Fields as String 

sFileName = "c:\fields.ini" 
''//Does the file exist? 
If Len(Dir$(sFileName)) = 0 Then 
    MsgBox ("Cannot find fields.ini") 
End If 

iFileNum = FreeFile() 
Open sFileName For Input As iFileNum 
Do While Not EOF(iFileNum) 
    Line Input #iFileNum, Fields 

    MsgBox (Fields) 

과 같은 형태 그리고이 코드는 현재 나에게 모든 라인을 제공하고, 난 몰라,

어쨌든 .. 하드 BTW 짜증 처음 2 명을 원해.

답변

30

. 또한 느리고 오류가 발생하기 쉽습니다.

VBA 편집기에서 도구 메뉴에서 참조를 선택하고 거의 모든 XP 또는 Vista 컴퓨터에서 사용할 수있는 "Microsoft Scripting Runtime"(scrrun.dll)을 찾으십시오. 그것은 거기에 있습니다, 그것을 선택하십시오. 이제 당신은에 액세스 할 수있는 (적어도 내게는) 오히려 더 강력한 솔루션 :

With New Scripting.FileSystemObject 
    With .OpenTextFile(sFilename, ForReading) 

     If Not .AtEndOfStream Then .SkipLine 
     If Not .AtEndOfStream Then .SkipLine 

     Do Until .AtEndOfStream 
      DoSomethingImportantTo .ReadLine 
     Loop 

    End With 
End With 
2

지나치게 단순화 할 수 있습니까?

Open sFileName For Input as iFileNum 
Line Input #iFileNum, dummy1 
Line Input #iFileNum, dummy2 
........ 

다르

+0

는 이러한 라인 입력 –

+0

-1의 각을 사용하기 전에 EOF를 확인하려는 것입니다. 파일에 두 줄 미만이있는 경우 실패합니다. – Tomalak

+0

일부 텍스트는 전체 텍스트 파일의 맨 아래에 있으며 각 줄을 찾습니다. 그리고 첫 번째 두 줄을 더미 문자열에 넣지 않으므로 다음 루프에서도 똑같은 일이 발생합니다. 의미, 그것은 텍스트 파일의 두 번째 줄을 건너 뜁니다. 그것은해서는 안된다. 실제로 배열에 배열을 삽입해야하는데 나중에 사용할 수 있습니다. –

3
Open sFileName For Input As iFileNum 

Dim LineNum As Long 
LineNum = 0 

Do While Not EOF(iFileNum) 
    LineNum = LineNum + 1 
    Line Input #iFileNum, Fields 
    If LineNum > 2 Then 
    DoStuffWith(Fields) 
    End If 
Loop 
+0

이것은 잘 작동하는 것 같습니다, 고맙습니다! :) 하지만 처음 두 줄을 다른 용도로 사용하려면 어떻게해야합니까? 첫 줄을 문자열에 저장하고 두 번째 줄을 다른 문자열에 저장하려고합니다. 그런 다음 배열의 나머지 줄을 배열에 저장 하시겠습니까? –

+0

LineNum = 1 Then Then ... ElseIf LineNum = 2 Then ... ElseIf LineNum> 2 Then ... End If – Tomalak

+1

LineNum 변수를 사용하는 대신 Seek 함수를 사용할 수 있습니다. 'LineNum = LineNum + 1'뿐만 아니라 선언과 초기화도 삭제하고'LineNum> 2 '를'Seek (iFileNum)> 2'로 대체하십시오. 또한,'Do While Not EOF (iFileNum)'대신'Do Until EOF (iFileNum)'을 사용할 수 있습니다. – systemovich

6

당신은 랜덤 액세스를 사용할 수 있습니다

그냥 다음 코드를 추가합니다. 전체 Open <file path> For Input As <some number> 일이 너무 1990 년대 것을

Open "C:\docs\TESTFILE.txt" For Random As #1 

    Position = 3 ' Define record number. 
    Get #1, Position, ARecord ' Read record. 

Close #1 
1
Dim sFileName As String 
Dim iFileNum As Integer 
Dim sBuf As String 
Dim Fields as String 
Dim TempStr as String 

sFileName = "c:\fields.ini" 
''//Does the file exist? 
If Len(Dir$(sFileName)) = 0 Then 
    MsgBox ("Cannot find fields.ini") 
End If 

iFileNum = FreeFile() 
Open sFileName For Input As iFileNum 

''//This part skips the first two lines 
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr 
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr 

Do While Not EOF(iFileNum) 
    Line Input #iFileNum, Fields 

    MsgBox (Fields) 
Loop 
관련 문제