Читать строки из текстового файла, но пропустить первые две строки - PullRequest
15 голосов
/ 02 июня 2009

У меня есть этот макрос в Microsoft Office Word 2003, который читает строки текстового файла. Каждая строка представляет собой строковое значение, которое мне нужно использовать позже в коде.

Однако первые две строки текстового файла содержат некоторые вещи, которые мне не нужны. Как я могу изменить код так, чтобы он пропускал две первые строки? «Intellisense» в редакторе VBA в Word - отстой

В любом случае, код выглядит примерно так

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)

И этот код в настоящее время дает мне все строки, и я не хочу первые две.

Ответы [ 5 ]

30 голосов
/ 02 июня 2009

Эта целая Open <file path> For Input As <some number> вещь , поэтому 1990-х годов. Это также медленно и очень подвержено ошибкам.

В редакторе VBA выберите «Ссылки» в меню «Инструменты» и найдите «Среда выполнения сценариев Microsoft» (scrrun.dll), которая должна быть доступна практически на любой машине с XP или Vista. Это там, выберите его. Теперь у вас есть доступ к (по крайней мере мне) более надежному решению:

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
6 голосов
/ 02 июня 2009

Вы можете использовать произвольный доступ.

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

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

Close #1
3 голосов
/ 02 июня 2009
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
2 голосов
/ 02 июня 2009

Может быть, я упрощаю?

Просто добавьте следующий код:

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

Сундара

1 голос
/ 11 июня 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...