txt Datei Zeile für Zeile auslesen

Moderator: ModerationP

txt Datei Zeile für Zeile auslesen

Beitragvon sebastianbraun6 » 26. Sep 2019, 17:04

Hallo!

Ich verwende folgenden Code um den gesamten Text einer txt auszulesen und in einer TextBox in einem Userform anzuzeigen.

Code: Alles auswählen
On Error GoTo errhandlerComboBox1
Dim TextFileComboBox1 As Integer
Dim FilePathComboBox1 As String
Dim FileContentComboBox1 As String
  FilePathComboBox1 = "C:\Test\Test.txt"
  TextFileComboBox1 = FreeFile
  Open FilePathComboBox1 For Input As TextFileComboBox1
  FileContentComboBox1 = Input(LOF(TextFileComboBox1), TextFileComboBox1)
  Close TextFileComboBox1
TextBox1.Value = FileContentComboBox1
errhandlerComboBox1:


Jetzt brächte ich das ganze genau so, nur dass er nur die z.b: Zeile 2 ausliest. (Txt besteht nur aus 3 Zeilen).
Gibt es da eine Möglichkeit einzuschränken was der FileContentComboBox1 Wert ist? Eben hald nur die 2te Zeile dieser txt.

PS: Das Beispiel ist sehr vereinfacht, im Endeffekt sind es tausende txt Dateien, wo eben nur die X-te Zeile ausgelesen werden soll.

lg. Sebastian
sebastianbraun6
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 53
Registriert: 04. Okt 2017, 19:29

Re: txt Datei Zeile für Zeile auslesen

Beitragvon Eierlein » 26. Sep 2019, 18:12

Code: Alles auswählen
 
...
...
  DIM Zeile AS LONG
    Zeile = 0

...
...

    OPEN FilePathComboBox1 FOR INPUT AS TextFileComboBox1
    WHILE NOT EOF(TextFileComboBox1)
        Zeile = Zeile +1
        LINE INPUT #TextFileComboBox1, FileContentComboBox1
        IF Zeile = 2 THEN
            CLOSE TextFileComboBox1
        END IF
    WEND
    CLOSE TextFileComboBox1   '<---- Zur Sicherheit, falls Zeile 2 nicht vorhanden
    TextBox1.Value = FileContentComboBox1
Eierlein
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 73
Registriert: 18. Jan 2015, 18:40

Re: txt Datei Zeile für Zeile auslesen

Beitragvon sebastianbraun6 » 26. Sep 2019, 18:56

Hallo! Danke für die Antwort.

Da bekommen ich für

Code: Alles auswählen
Dim TextFileComboBox1 As Integer
Dim FilePathComboBox1 As String
Dim FileContentComboBox1 As String
Dim Zeile As Long
    Zeile = 0
'File Path of Text File
  FilePathComboBox1 = "Q:\NOE\1_Gruppen\Abt23\Sachbearbeitung\+ Vorlagen +\Makros\ZVFueller\Verbindungsstellen\" & ComboBox1.Value & ".txt"
'Determine the next file number available for use by the FileOpen function
  TextFileComboBox1 = FreeFile
'Open the text file
   Open FilePathComboBox1 For Input As TextFileComboBox1
    While Not EOF(TextFileComboBox1)
        Zeile = Zeile + 1
        Line Input #TextFileComboBox1, FileContentComboBox1
        If Zeile = 2 Then
            Close TextFileComboBox1
        End If
    Wend
    Close TextFileComboBox1   '<---- Zur Sicherheit, falls Zeile 2 nicht vorhanden
    TextBox1.Value = FileContentComboBox1


einen Fehler bei
Code: Alles auswählen
    While Not EOF(TextFileComboBox1)


Laufzeitfehler 52:
Dateiname oder -nummer falsch
sebastianbraun6
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 53
Registriert: 04. Okt 2017, 19:29

Re: txt Datei Zeile für Zeile auslesen

Beitragvon knobbi38 » 26. Sep 2019, 20:25

Hallo Sebastian,

ich habe mal die Idee von Eierlein aufgegriffen und das als Funktion umgebaut, wobei die Fehlerausgabe im Direktfenster erfolgt:
Code: Alles auswählen
Option Explicit

Public Function ReadLineFromFile( _
    ByVal Filename As String, _
    Optional ByVal LineNo As Integer = 1) As String
 
  Dim strLineBuffer As String
  Dim intFNr As Integer
  Dim intLine As Integer
   
  On Error GoTo Err_Handler
 
  If LineNo > 0 Then
    intFNr = FreeFile()
    intLine = 0
 
    Open Filename For Input Access Read As #intFNr
 
    ' Lese vorwärst bis zur bestimmten Zeile
    ' oder bis das Dateiende erreicht wird,
    ' je nachdem, was zuerst Eintritt
    Do While Not EOF(intFNr) And intLine < LineNo
      Line Input #intFNr, strLineBuffer
      intLine = intLine + 1
    Loop
 
    ' Wenn die bestimmte Zeile gelesen worden ist,
    ' gebe den Inhalt zurück.
    If intLine = LineNo Then
      ReadLineFromFile = strLineBuffer
    End If
  End If
 
Exit_Handler:
  Close #intFNr
  Exit Function
 
Err_Handler:
  Debug.Print "ReadLineFromFile() Error:"; _
      Err.Number; Err.Description; "!"
  Resume Exit_Handler
End Function

Der Code gehört in ein Modul und würde dann bei dir so aufgerufen:
Code: Alles auswählen
TextBox1.Value = ReadLineFromFile(FilePathComboBox1,2)


Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1494
Registriert: 02. Jul 2015, 14:23

Re: txt Datei Zeile für Zeile auslesen

Beitragvon Eierlein » 26. Sep 2019, 21:54

Das passiert wenn man nicht testet.

Entweder so
Code: Alles auswählen
.....
  Open FilePathComboBox1 For Input As TextFileComboBox1
    While Not EOF(TextFileComboBox1)
        Zeile = Zeile + 1
        Line Input #TextFileComboBox1, FileContentComboBox1
        If Zeile = 2 Then
              TextBox1.Value = FileContentComboBox1
        End If
    Wend
    Close TextFileComboBox1   
 


oder wenn deine TextDatei tausende Zeilen hat so:

Code: Alles auswählen
...
  Open FilePathComboBox1 For Input As TextFileComboBox1
    Do While Not EOF(TextFileComboBox1)
        Zeile = Zeile + 1
        Line Input #TextFileComboBox1, FileContentComboBox1

        If Zeile = 2 Then Exit Do   '<----
    Loop
    Close TextFileComboBox1   
   TextBox1.Value = FileContentComboBox1
Eierlein
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 73
Registriert: 18. Jan 2015, 18:40

Re: txt Datei Zeile für Zeile auslesen

Beitragvon knobbi38 » 26. Sep 2019, 22:42

@Eierlein:
zwei Anmerkungen zu deinem zweiten Beispiel:
1) die Zeile "If Zeile = 2 Then Exit Do '<----"
kann auch gleich mit in die Bedingung für die Schleife aufgenommen werden:
Code: Alles auswählen
Zeile = 0
Do While Not EOF(TextFileComboBox1) and Zeile < 2
  ...
Loop

2) Wenn die Datei nur eine Zeile hat, wird das falsche Ergebnis zurück geliefert, ohne daß das bemerkt werden könnte -> sehr schwer zu findender Fehler!

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1494
Registriert: 02. Jul 2015, 14:23

Re: txt Datei Zeile für Zeile auslesen

Beitragvon Eierlein » 26. Sep 2019, 23:42

2) Wenn die Datei nur eine Zeile hat, wird das falsche Ergebnis zurück geliefert, ohne daß das bemerkt werden könnte


ToDo Liste für Sebastion:
Prüfen ob eine 2. Zeile vorhanden ist.
Prüfen ob in der 2. Zeile Text drin steht. Nicht nur CrLf.
Wenn nicht Fehlerbehandlung.

Kann entfallen wenn sicher ist, das alle Dateien 3 Zeilen enthalten. Wie behauptet.
Eierlein
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 73
Registriert: 18. Jan 2015, 18:40

Re: txt Datei Zeile für Zeile auslesen

Beitragvon knobbi38 » 27. Sep 2019, 10:01

@Eierlein:
...Kann entfallen wenn sicher ist, das alle Dateien 3 Zeilen enthalten. Wie behauptet.

Das sind dann die Programme, die manchmal laufen und machmal nicht - und keiner weiß warum. :shock:
Das ist Basteln und hat mit Programmierung nichts mehr zu tun! :roll:

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1494
Registriert: 02. Jul 2015, 14:23

Re: txt Datei Zeile für Zeile auslesen

Beitragvon theoS » 27. Sep 2019, 13:38

Grundsätzliche Frage...
Woher kommt die txt?
Welche Kodierung?
Welches Zeilenende?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4783
Registriert: 19. Apr 2008, 00:14

Re: txt Datei Zeile für Zeile auslesen

Beitragvon sebastianbraun6 » 27. Sep 2019, 14:24

Grundsätzliche Frage...
Woher kommt die txt?
Welche Kodierung?
Welches Zeilenende?


Oh Gott, jetzt kommt wieder so eine Frage die offenlegt wie wenig Ahnung ich vom Programmieren habe.

Simpel gesagt: Für jeden Kunden wird eine txt Datei angelegt, in der in der ersten Zeile Name, in der zweiten Zeile Adresse und in der dritten Zeile eine Bemerkung steht. Diese txt Dateien liegen auf einem Abteilungsordner, auf dem jeder User zugriff hat. So kann ich Kunden anlegen und löschen, ohne das Userform bei jedem User zu aktualisieren (Derzeit sind alle Kunden im Userform Code einzeln aufgelistet, was natürlich ein riesen Aufwand ist/war).

Ich werde eure Vorschläge mal testen und dann Rückmeldung geben.
sebastianbraun6
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 53
Registriert: 04. Okt 2017, 19:29

Re: txt Datei Zeile für Zeile auslesen

Beitragvon knobbi38 » 27. Sep 2019, 14:28

Hallo,

dafür gab es früher ein analoges Rolodex auf dem Schreibtisch - das war einfacher. :mrgreen:

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1494
Registriert: 02. Jul 2015, 14:23

Re: txt Datei Zeile für Zeile auslesen

Beitragvon sebastianbraun6 » 27. Sep 2019, 15:01

Hallo!

Funktioniert alles soweit super! Vielen Dank :)
sebastianbraun6
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 53
Registriert: 04. Okt 2017, 19:29


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste