2009-06-02 20 views
15

ilk iki satırı atlamak. Satırların her biri, daha sonra kodda kullanmam gereken bir dize değerini temsil eder. bir metin dosyasından satırları okuyun ama metin dosyasının satırları okuyan, Microsoft Office Word 2003'te bu makro kodu var

Ancak, metin dosyasının ilk iki satırı ihtiyacım yok bazı şeyler içeriyor. Kodu ilk iki satırı atlayacak şekilde nasıl değiştirebilirim? Word'de VBA editörü içinde "IntelliSense" kod bu

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) 

gibi görünür Ve bu kod şu anda bana çizgilerin hepsi verir ve benim yok

neyse .. Sert btw berbat İlk ikisini de istiyorum.

cevap

30

. Ayrıca yavaş ve çok hataya eğilimli.

VBA düzenleyicinizde, Araçlar menüsünden Referanslar'ı seçin ve hemen hemen tüm XP veya Vista makinelerinde bulunması gereken "Microsoft Scripting Runtime" (scrrun.dll) dosyasına bakın. Orası, seç. Artık bir erişmesini (bana en azından) yerine daha sağlam bir çözüm:

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

Ben basitleştiriyorsun am olabilir?

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

Sundar

+0

Ayrıca şu Çizgi Girişlerin –

+0

-1 her kullanmadan önce EOF kontrol etmek isteyeyim. Dosya az iki satır – Tomalak

+0

Ben her satırı arayan tüm metin dosyasına geçer altındaki bu döngü var, dışında biraz çalışır varsa bu başarısız olur. Biz bir kukla dizedeki ilk iki satırı koymak değil çünkü Ve aynı şey gelecek döngü meydana gelir. Anlamı, metin dosyasındaki her ikinci satırı atlar. Hangi yapılmamalıdır. Aslında çizgileri daha sonra kullanabileceğiniz bir dizi, eklenen olsun olması gerekir. –

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

Bu oldukça iyi çalışıyor, thanx! :) Ama ilk iki satırı başka bir şey için kullanmak istersem? Say, ilk satırı bir dizede ve ikinci satırı başka bir dizede saklamak istiyorum. Ardından, satırların geri kalanını bir dizide saklayın. –

+0

LineNum = 1 ise ... ElseIf LineNum = 2 Sonra ... ElseIf LineNum> 2 Sonra ... End If – Tomalak

+1

LineNum değişkenini kullanmak yerine Seek işlevini kullanabilirsiniz. Bildirimi ve başlatmanın yanı sıra 'LineNum = LineNum + 1 'öğesini silin ve' LineNum> 2' öğesini 'Seek (iFileNum)> 2' ile değiştirin. Ayrıca, 'EOF (iFilenum) Olmasa' yerine 'EOF (iFileNum)' e Kadar Yapabilirsiniz. – systemovich

6

Sen rastgele erişimini kullanabilir:

Sadece aşağıdaki kodu ekleyin. Bütün Open <file path> For Input As <some number> şey yüzden 1990'lar olduğunu Yani

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