web-dev-qa-db-ja.com

テキストファイルから行を読み取るが、最初の2行をスキップする

このマクロコードはMicrosoft Office Word 2003にあり、テキストファイルの行を読み取ります。行はそれぞれ、後でコードで使用する必要がある文字列値を表します。

ただし、テキストファイルの最初の2行には、不要なものが含まれています。最初の2行をスキップするようにコードを変更するにはどうすればよいですか? WordのVBAエディタ内の "Intellisense"は、ハード..

とにかく、コードは次のようになります

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)

そして、このコードは現在すべての行を提供しており、最初の2行は必要ありません。

15
Kenny Bones

その全体Open <file path> For Input As <some number>事はso 1990sです。また、速度が遅く、エラーが発生しやすくなります。

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
30
Mike Woodhouse

ランダムアクセスを使用できます。

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

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

Close #1
6
Fionnuala
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
3
Tomalak

単純化しすぎているのでしょうか?

次のコードを追加するだけです。

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

スンダー

2
user115905
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
1
Sjuul Janssen