Frage

Dieser Code wird eine Zeile aus einer Textdatei lesen:

set file = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\number.txt", 1)
text = file.ReadLine
MsgBox text

Wie kann ich es liest immer wieder eine Zeile nach dem anderen aus der gleichen Datei? Ich denke, ich sollte eine Schleife verwenden hier, nicht wahr? Ich brauche es die erste Zeile aus der Datei bei der ersten Iteration zu lesen, die zweite Zeile in der zweiten Iteration, die dritte an der dritten und so weiter, bis alle Zeilen gelesen wurden. Wie kann ich es tun?

Wichtiger Zusatz: Ich brauche den Code in jeder Zeile ein zu betreiben, indem man - nicht alle auf einmal

!
War es hilfreich?

Lösung

Verwenden Sie die ReadAll() Methode:

text = file.ReadAll

(könnte von Interesse sein: Filesystembeispielcode )

Mit einer Schleife:

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, FileName, TextLine

Set fso = CreateObject("Scripting.FileSystemObject")

FileName = "c:\testfile.txt"

Set MyFile = fso.OpenTextFile(FileName, ForReading)

'' Read from the file
Do While MyFile.AtEndOfStream <> True
    TextLine = MyFile.ReadLine

    '' Do stuff to TextLine

Loop
MyFile.Close

Andere Tipps

Wenn Sie aus irgendeinem Grund den eingebauten VBA-Datei Behandlungsroutinen verwenden möchten, würden Sie folgenden Code verwenden:

Sub ReadAFileLineByLine()
    Dim InStream As Integer
    InStream = FreeFile()
    Open "C:/tmp/fastsynchtoquesttry_quest.txt" For Input As InStream

    Dim CurrLine As String
    Do While True
        Line Input #InStream, CurrLine
        ' do stuff to CurrLine
        If EOF(InStream) Then Exit Do
    Loop

    Close #InStream
End Sub

Sie können eine Referenz * an dem Host Object Model Windows Script hinzufügen, wird es Ihnen mit dem Objekt Filesystem helfen, denn man kann dann sagen:

Dim fs As FileSystemObject
Dim f As TextStream

die es Ihnen erlaubt Intellisense zu verwenden, um die verschiedenen Eigenschaften und den Objektkatalog finden Sie in der Bibliothek zu erkunden.

* im Code-Fenster, wählen Sie Extras, Hinweise und markieren Sie das Kästchen neben der Bibliothek, die Sie wollen.

Ich schrieb eine VBA-Routine, die für jeden Satz in dem Text eine Textdatei und legen Sie eine neue Folie liest.

Zuerst in Dia # 1, fügen Sie eine Schaltfläche, die das Makro mit dem Namen "erzeugen"

ruft

Der Quellcode geht:

Const DEFAULT_SLIDE = 1 ' the slide to copy the layout style from
Const MARGIN = 50       ' margin of the generated textbox

Sub generate()
    Dim txtFile As String   ' text file name
    Dim fileNo As Integer   ' file handle
    Dim buffer As String    ' temporary string buffer
    Dim sentence() As String    ' the main array to save sentences
    Dim i, total As Integer
    Dim myLayout As CustomLayout
    Dim mySlide As Slide
    Dim myShape As Shape
    Dim myWidth, myHeight As Integer    'slide width and height


    txtFile = "text2sample.txt"
    txtFile = ActivePresentation.Path & "\" & txtFile   'textfile should be in the same Dir as this ppt

    If Len(Dir$(txtFile)) = 0 Then
        MsgBox txtFile & " file not found."
        Exit Sub
    End If

    'Initialize array
    ReDim sentence(0)

    'get file handle number
    fileNo = FreeFile()
    Open txtFile For Input As #fileNo

    i = 0
    Do While Not EOF(fileNo)
        Line Input #fileNo, buffer  'read & save sentences line by line
        ReDim Preserve sentence(i + 1)  ' increase 1 more array
        sentence(i) = LTrim(RTrim(buffer))
        i = i + 1
    Loop
    Close #fileNo

    total = i
    Randomize   ' for random color

    With ActivePresentation.PageSetup
        myWidth = .SlideWidth - MARGIN  'get width and height
        myHeight = .SlideHeight - MARGIN
    End With

    For i = 0 To total
        Set myLayout = ActivePresentation.Slides(DEFAULT_SLIDE).CustomLayout
        'add a slide like slide #1
        Set mySlide = ActivePresentation.Slides.AddSlide(DEFAULT_SLIDE + 1 + i, myLayout)
        'add a textbox with margin
        Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _
        AddTextbox(msoTextOrientationHorizontal, MARGIN, MARGIN, myWidth, myHeight)
        With myShape
            'add a sentence
            .TextFrame.TextRange.Text = sentence(i)
            .TextFrame.TextRange.Font.Size = 60
            ' color 255 is too bright. Pick a less bright color (200)
            .TextFrame.TextRange.Font.Color.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            .TextFrame.TextRange.Font.Bold = msoTrue
            .TextFrame.TextRange.Font.Shadow = msoTrue
            ' If you want to change the color of the shape
            '.Fill.ForeColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            '.Fill.BackColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            '.Fill.Solid
        End With
        'add a textbox for slideshow progress ex) 1/100
        Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _
        AddTextbox(msoTextOrientationHorizontal, 0, 0, 150, 20)
        With myShape
            .TextFrame.TextRange.Text = "( " & i & " /" & total & " )"
            .TextFrame.TextRange.Font.Size = 20
            .TextFrame.TextRange.Font.Color.RGB = RGB(100, 100, 100)
        End With
    Next

    MsgBox total & " Slides were added.", vbInformation

End Sub

Datei herunterladen: http://konahn.tistory.com/attachment/cfile8.uf@2175154C573D3BC02A2DFA.pptm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top