Geschriebene Zeilen zählen?

DaManu

Grünschnabel
Hallo,

jetz muss ich hier schon wieder mit meinen Anfänger Fragen nerven... ;) Und zwar häng ich an einer verbesserten Version meines Log File Auswerters...

Der Ausschlaggebende Code:

Code:
Do Until EOF(1)
            Line Input #1, var
            part = Mid(var, 25, 5)
            If InStr(part, search) > 0 Then
                Write #2, var
                txtLog.Text = txtLog.Text & var & vbCrLf
            End If
            DoEvents
        Loop

Funktioniert soweit auch ganz gut, nur nich besonders schnell... ;)

So nun wollte ich es so machen, dass er mir zwar immer noch die Textfiles in nem bestimmten Ordner abspeichert (Die da ja rauskommen), allerdings soll er mir jetzt ganze 8 Stück auf einmal ausgeben und abspeichern...

Die Textboxen auf meiner Form sollen eigentlich nichts weiter machen, als zu Zählen, wieviele Zeilen geschrieben werden.

Auf gut deutsch, die Form ist rein dazu da, anzuzeigen, wieviele Datensätze die Log's dann enthalten.

Was auch schön wär, wenn der Zählvorgang "sichtbar" wäre... geht das mit DoEvents?

naja, ich hab auf jeden fall keine Ahnung, wie ich die Boxen zum zählen bring, aber ich muss jetz eh noch n paar schleifen basteln... ;)

würd mich freuen, wenn mir jemand weiterhelfen könnte, mit diesem wohl wahrlich leicht zu lösenden Problem.

Grüße

DaManu :suspekt:

Edit: Da fällt mir grad auf, dass meine Globale Variable nicht funktioniert!

Ich habe mir eine Dateiauswahls-Form gebastelt... natürlich will ich den Pfad dann für meine Hauptprozedur haben...

Hab dann gelesen, ich müsse die Variable in nem Modul als Public deklarieren, aber irgendwie bekomm ich jetzt ne Fehlermeldung... ?(

Und noch ein Hilferuf! Der wohl wichtigste in dem ganzen Chaos

Code:
Private Sub cmdGrab_Click()
    Open "Dateiname" For Input As #1
    Open "Dateiname" For Append As #2
        Do Until EOF(1)
            Line Input #1, var
            part = Mid(var, 51, 1)
            If InStr(part, "K") > 0 Then
                Write #2, var
            End If
        Loop
    Close #1

    Open "Dateiname" For Append As #3
        Do Until EOF(2)
            Line Input #2, var2
            part2 = Mid(var, 56, 1)
            If InStr(part2, "-") > 0 Then
                Write #3, var2
            End If
        Loop
    Close #3
    Close #4
End Sub

Irgendwie übergibt er nichts an die zweite Schleife! Was mach ich falsch? es wird doch möglich sein, eine Datei auf die weise zu verarbeiten... hatte eigentlich nicht vor, für jeden Arbeitsschritt nen Button ein zu bauen...

bitte helft mir, is echt wichtig! danke!

Und noch was is mir grad aufgefallen, was nich gerade förderlich ist... wie kann ich ihn dazu bringen, dass er die Dateien ohne " schreibt? die Nerven nämlich wirklich!
 
Zuletzt bearbeitet:
Hallo,

wenn in der Datei ohne Anführungszeichen gespeichert werden soll, verwendest Du Print statt Write, z.B.:
Code:
    Print #2, var

Variablen, die in Deinem gesamten Projekt verfügbar sein sollen, definierst Du auf Modulebene (dazu musst Du Deinem Projekt also ein Modul hinzufügen, wie folgt:

Code:
Option Explicit

Public MeineVariable As String

Hierbei musst Du beachten, dass Du diesen Variablennamen nicht noch mal lokal dimensionierst. Falls Du beispielsweise in irgend einer Prozedur nochmal stehen hättest:
Code:
Sub Test ()
    Dim MeineVariable As String
End Sub
...dann würde die global dimensionierte Variable in der Prozedur nicht zur Verfügung stehen, da sie dann von der lokalen übersteuert würde. Umgekehrt würden natürlich auch Werte, die Du in der Prozedur Test (in meinem Beispiel) dieser Variable zuweisen würdest, dem restlichen Projekt nicht zur Verfügung stehen, da die Wertzuweisung dann an die lokale Variable erfolgt.

Um in einer Textbox die Anzahl geschriebener Zeilen zu zählen, kannst Du wie folgt vorgehen:

Code:
     Dim Anzahl As Long
     Anzahl = 0
     txtZeigeAnzahl.Text = Str(Anzahl)

Do Until EOF(1)
            Line Input #1, var
            part = Mid(var, 25, 5)
            If InStr(part, search) > 0 Then
                Print #2, var
                Anzahl = Anzahl + 1
                txtZeigeAnzahl.Text = Str(Anzahl)
' Oder:
                TxtZeigeAnzahl.Text = Str(Val(TxtZeigeAnzahl.Text)+1)
                txtLog.Text = txtLog.Text & var & vbCrLf
            End If
            DoEvents
        Loop


Grüsse
ronaldh
 
dankeschön!

das mit der globalen hab ich schon richtig gemacht... nur leider stimmt da was anderes nicht!
 
Wenns wirklich nur dazu geht, die geschriebenen Zeilen zu zählen, hätte ich eine etwas andere Methode:
Du liest die Datei binär komplett ein und splittest sie nach Zeilenumbrüchen. Dann ist die Anzahl der Arrayelemente die Anzahl der Zeilen. Diese Variante ist dann sinnvoll, wenn du die Zeilen auch auswerten willst.

Alternativ (so wie du den Code hast) geht das so hier.


Der Doc!
 
Zurück