web-dev-qa-db-fra.com

Lire les lignes d'un fichier texte mais ignorer les deux premières lignes

J'ai ce code macro dans Microsoft Office Word 2003 qui lit les lignes d'un fichier texte. Les lignes représentent chacune une valeur de chaîne que je dois utiliser plus tard dans le code.

Cependant, les deux premières lignes du fichier texte contiennent des éléments dont je n'ai pas besoin. Comment puis-je modifier le code pour qu'il saute les deux premières lignes? Le "Intellisense" au sein de l'éditeur VBA dans Word suce dur btw ..

Quoi qu'il en soit, le code ressemble à ceci

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)

Et ce code me donne actuellement toutes les lignes, et je ne veux pas des deux premières.

15
Kenny Bones

L'ensemble Open <file path> For Input As <some number> chose est donc 1990. Il est également lent et très sujet aux erreurs.

Dans votre éditeur VBA, sélectionnez Références dans le menu Outils et recherchez "Microsoft Scripting Runtime" (scrrun.dll) qui devrait être disponible sur à peu près n'importe quelle machine XP ou Vista. Elle est là, Maintenant, vous avez accès à une solution (pour moi du moins) plutôt plus robuste:

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

Vous pouvez utiliser un accès aléatoire.

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

Peut-être que je simplifie trop?

Ajoutez simplement le code suivant:

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

Sundar

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