Textdatei nur öffnen wenn bestimmter Text enthalten ist?

scyzo

Grünschnabel
Ich möchte mit meinem Programm Textdateien einlesen können, aber nur wenn diese bestimmte Bedingungen erfüllen. So müssen in der Textdatei folgende Textelemente enthalten sein, damit die Textdatei eingelesen wird. [Output Per Customer], [Takings Per Customer], [Total Output] und [Total Takings].
Die Textdatei soll nur unter der Bedingnung, dass alle diese vier Elemente darin enthalten sind, geöffnet werden, andernfalls soll das Programm eine Message Box mit einer Error Message bringen.
Wie kann ich es programmieren, dass die Datei nur unter der Bedingung dass diese 4 Elemente darin enthalten sind, geöffnet wird?
 
Also, öffnen und einlesen musst du immer, sonst kannst du den Text ja nicht nach den Schlüsselwörtern durchsuchen. Du musst dann halt die Meldung ausgeben, wenn deine Wörter nicht drin sind.

In deinem Fall würde sich das binäre Einlesen anbieten, so kannst du die Textdatei in einem Rutsch einlesen und auf die Wörter prüfen.
Visual Basic:
'eine Bool-Variable bzw. eine String-Variable für den Inhalt der Datei formweit definieren
Dim bVorhanden As Boolean, sInhalt As String
'Ich verwende hier einen CommandButton
Private Sub Command1_Click()
 'Bool-Variable auf Falsch setzen
 bVorhanden = False
 'Prüf-Prozedur aufrufen
 PrüfeDatei "C:\Text.txt"
 'Wenn Texte nicht vorhanden, dann eine Messagebox ausgeben und abbrechen
 If bVorhanden = False Then MsgBox "Error: Falsche Datei!", vbCritical, "Fehler": Exit Sub
 
 'Hier ginge dein Code weiter, der Inhalt der Datei steht in der Variable sInhalt und kann weiter verwendet werden
End Sub

'Die Prüf-Prozedur
Sub PrüfeDatei (ByVal sDateiname As String)
 'Dimensionierungen
 Dim iFile As Integer

 'freie Dateinummer ermitteln
 iFile = FreeFile

 'Platz vorbelegen:
 sInhalt = Space(FileLen(sDateiname))

 'Datei binär öffnen
 Open sDateiname For Binary As iFile
  'und komplett einlesen
  Get #iFile, , sInhalt
 Close iFile

 'auf die Wörter prüfen
 If InStr(sInhalt, "[Output Per Customer]", vbTextCompare) > 0 Then bVorhanden = True Else bVorhanden = False
 If InStr(sInhalt, "[Takings Per Customer]", vbTextCompare) > 0 Then bVorhanden = True Else bVorhanden = False
 If InStr(sInhalt, "[Total Output]", vbTextCompare) > 0 Then bVorhanden = True Else bVorhanden = False
 If InStr(sInhalt, "[Total Takings]", vbTextCompare) > 0 Then bVorhanden = True Else bVorhanden = False
End Sub


Der Doc!
 
Danke soweit, nur bekomme ich wenn ich die von dir beschriebene Funktion benutze immer bei dieser Stelle
"Get #iFile, , sInhalt"
die Fehlermeldung "variable uses an Automation Type not supported in Visual Basic" :confused:
 
Also, bei mir gehts, nur gehört bei den InStr()-Abfragen das ", vbTextCompare" weg. Ich krieg dann korrekte Ergebnisse.


Der Doc!
 

Neue Beiträge

Zurück