vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Datei auf Inhalt überprüfen 
Autor: Leberkas
Datum: 04.08.17 23:05

Hallo,

hiermit überprüfe ich ob die geladene Datei das richtige Format hat:
Public Class Form1
 
    Public Function ReadLine(ByVal filename As String, ByVal line As Integer) _
      As String
 
        Try
            Dim lines As String() = My.Computer.FileSystem.ReadAllText( _
              filename, System.Text.Encoding.Default).Split(vbCrLf)
 
            If line > 0 Then
                Return lines(line - 1)
            ElseIf line < 0 Then
                Return lines(lines.Length + line - 1)
            Else
                Return ""
            End If
        Catch ex As Exception
            Return ""
        End Try
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK _
        Then
            If ReadLine(OpenFileDialog1.FileName, 1) = "Otto" Then
                MessageBox.Show("Otto Datei")
            Else
                If ReadLine(OpenFileDialog1.FileName, 1) = "Peter" Then
                    MessageBox.Show("Peter Datei")
                Else
                    MessageBox.Show("flasche Format")
                End If
            End If
 
        End If
    End Sub
 
 
End Class
Ich schaue ob in der ersten Zeile das richtige Wort steht.

Wie würdet Ihr eine Datei auf das richtige Format überprüfen ?

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: Manfred X
Datum: 05.08.17 01:13

Vielleicht etwas in dieser Art .......

 ''' <summary>Ermittlung einer bestimmten Zeile in einer Text-Datei</summary>
 ''' <param name="filepath">voller Pfad der zu lesenden Datei</param>
 ''' <param name="linenumber">Index der zu lesenden Zeile (eins-basiert)</param>
 ''' <param name="IgnoreEmptyLines">Leere Zeilen bei Indizierung ignorieren?</param>
 ''' <param name="Message">Fehlermeldung oder Leere Rückgabe</param>
 ''' <returns>gelesene Zeile oder Nothing</returns>
 Private Function ReadLine(ByVal filepath As String, _
                           ByVal linenumber As Integer, _
                          Optional ByVal IgnoreEmptyLines As Boolean = True, _
                          Optional ByRef Message As String = "") As String
 
        If Not IO.File.Exists(filepath) Then
            Message = "Datei nicht gefunden" : Return Nothing
        End If
        If New IO.FileInfo(filepath).Length = 0 Then
            Message = "Leere Datei" : Return Nothing
        End If
        If linenumber < 1 Then
            Message = "Ungültiger Parameter: LineNumber" 
            Return Nothing
        End If
 
        Dim ln As Integer = 0
        Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8
        Dim line As String, ret As String = Nothing
        Try
            Using sr As New IO.StreamReader(filepath, enc, False)
                Do
                    line = sr.ReadLine()
                    If Not IgnoreEmptyLines OrElse _
                       Not line = String.Empty Then
                        ln += 1
                        If ln = linenumber Then ret = line
                    End If
                Loop Until ln = linenumber Or sr.EndOfStream
            End Using
            If ret Is Nothing Then
                Message = "Ungültiger Parameter: LineNumber"
            Else
                Message = ""
            End If
            Return ret
        Catch ex As Exception
            Message = ex.Message : Return Nothing
        End Try
    End Function
Anwendung:
  Dim message As String = ""
  Dim line As String = _
       ReadLine("C:\daten\aaa.txt", 1, False, message)
  If line Is Nothing Then
     MsgBox(message)
  Else
     MsgBox(line)
  End If
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: Franki
Datum: 05.08.17 03:00

Hallo,

definiere doch mal was du unter richtigem Format verstehst.
Du arbeitest mit Split teilst also die eingelesene Datei in ihre Bestandteile auf. Soweit so gut, nur zusätzlich zu dem Hinweis von ManfredX musst du weitere Prüfungen machen.

Denn was ist, wenn in der zweiten "Spalte" in der 56. Zeile anstatt eines Datums z.B. nichts oder aber "aa.aa.aaaa" steht?

Du musst für wichtige Daten jede Zeile einlesen, auf jedes Feld analysieren und entsprechend reagieren. Eine Einzelprüfung auf die erste Zeile reicht nicht wenn es sich um wichtige Daten handelt, das ist eher ein Anhaltspunkt mehr aber auch nicht.

Warum du die Prüfung brauchst wissen wir nicht, wie wichtig welches "Feld" ist auch nicht, da müßtest du weiter Informationen liefern.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: FormFollowsFunction
Datum: 05.09.17 02:54

Hallo Leberkas

Ich denke , mit "Format" ist der Inhalt gemeint, denn das Format ist hier Textfile (.txt).
Zu deinem code oben, zwei Anmerkungen.
Zum einen; Finger weg von Try Catch, es sei denn, es ist an der stelle nicht vermeidbar und du weist was du tust.
Exeptions sind dafür da fehler aufzuzeigen, wenn du sie unterdrückst, bekommst du früher, oder spähter Probleme.
Gut gecodet wirft keine Exeptions!
Zum anderen; Vermeide den My Namespace, das ist olles kompatiblitätsgerümpell aus vb6 Zeiten.
Am besten schmeist du den Namespase gleich ganz aus dem (allen) Projekt(en)

@ Manfred X

Es ist nicht sinnvoll, alles in eine Methode zu stopfen, das ist wenig flexibel.
Ich versuche Methoden immer möglicht nativ zu gestallten, in etwa so:
    Private Sub VerifyFile(ByVal targetFile As String)
        If FileExist(targetFile) Then
            If Not FileEmty(targetFile) Then
                Dim Lines As List(Of String) = ReadFile(targetFile, _
                  System.Text.Encoding.UTF8, True)
                If Lines(0).Contains("otto") AndAlso Lines.Last.Contains("end") _
                Then
                    ' Do something
                Else
                    If MessageBox.Show("Invalid file.", "Error", _
                      MessageBoxButtons.OK) = Windows.Forms.DialogResult.Yes _
                      Then
                        Application.Exit()
                    End If
                End If
            Else
                If MessageBox.Show("File is empty.", "Error", _
                  MessageBoxButtons.OK) = Windows.Forms.DialogResult.Yes Then
                    Application.Exit()
                End If
            End If
        Else
            If MessageBox.Show("File don't exist.", "Error", _
              MessageBoxButtons.OK) = Windows.Forms.DialogResult.Yes Then
                Application.Exit()
            End If
        End If
    End Sub
 
    Private Function FileExist(ByVal filePath As String) As Boolean
        Return IO.File.Exists(filePath)
    End Function
 
    Private Function FileEmty(ByVal filePath As String) As Boolean
        Dim fi As IO.FileInfo = New IO.FileInfo(filePath)
        If fi.Length = 0 Then
            Return True
        Else
            Return False
        End If
    End Function
 
    Private Function ReadFile(ByVal filePath As String, ByVal encoding As _
      System.Text.Encoding, ByVal detectEncoding As Boolean) As List(Of String)
        Return IO.File.ReadAllLines(filePath).ToList
    End Function
 
    Private Function Verify(ByVal value As String, ByVal searchPattern As _
      String) As Boolean
        Return value.Contains(searchPattern)
    End Function
VerifyFile kann jetz natürlich auch ganz anders aussehen, der Rest kann aber unangetastet bleiben.
z.B kann man die Liste auch global iniziieren und dann belibig weiter verwursten.

Dim gruß As New Gruß("Mit freundlichen Grüßen, FormFollowsFunction :) ")
gruß.Schow()
https://msdn.microsoft.com/de-de/library <- Mal rein schauen! ;)

Beitrag wurde zuletzt am 05.09.17 um 02:57:41 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: Manfred X
Datum: 05.09.17 08:57

Hallo!

Vielen Dank für Deine "wertvollen" Hinweise.

Die Behandlung von Exceptions ist oft unvermeidlich -
z.b. beim Zugriff auf externe Datenquellen, beim Filtern
von Sonderbedingungen oder beim Erstellen von Bibliotheken,
die in verschiedenen Anwendungsbereichen eingesetzt werden.
Das hat nichts mit gutem oder schlechtem Code zu tun.
Deshalb gibt es im Framework eine ausgereifte Try-Catch-Finally-Technologie.

Der My-Namespace enthält nicht nur "altes Gerümpel", sondern
diverse Methoden bieten gewisse Vereinfachungen und Flexibilisierungen
gegenüber zugrundeliegenden Framework-Methoden.
Sie sind aktueller Bestandteil des Framework und deshalb nicht veraltet.

[I]Es ist nicht sinnvoll, alles in eine Methode zu stopfen, das ist wenig flexibel.[/I]
Das stimmt so pauschal auch nicht.
Einzeilige Methoden - wie Du sie vorschlägst - sind oft nur unnützer Ballast.
Die Gestaltung von Methoden ist im Einzelfall zu entscheiden.

Ich bitte Dich, wenn Du möchtest, Fragen zu beantworten, aber bitte keine
"Philosophien" in einem Einsteigerforum zu predigen, die nur Verwirrung stiften.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: FormFollowsFunction
Datum: 05.09.17 12:40

Wenn ihr meint, Eure Durchlaucht.

Dim gruß As New Gruß("Mit freundlichen Grüßen, FormFollowsFunction :) ")
gruß.Schow()
https://msdn.microsoft.com/de-de/library <- Mal rein schauen! ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: effeff
Datum: 05.09.17 13:28

Da Leberkas nur prüfen möchte, ob ein bestimmter Begriff in der Datei enthalten ist, reicht es doch völlig, den Inhalt einzulesen und dann zu prüfen, ob dieser Begriff darin enthalten ist...

Dim sr As New StreamReader("d:\irgendwas\textdatei.txt")
Dim strInhalt as String=sr.ReadToEnd
 
If strInhalt.Contains("Otto") Then...<pre><code>
Bzw., wenn "Otto" am Anfang der Datei steht:

Dim sr As New StreamReader("d:\irgendwas\textdatei.txt")
Dim strInhalt as String=sr.ReadToEnd
 
If strInhalt.StartsWith("Otto") Then...<pre><code>

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datei auf Inhalt überprüfen 
Autor: FormFollowsFunction
Datum: 05.09.17 13:55

Zitat:

Du musst für wichtige Daten jede Zeile einlesen, auf jedes Feld analysieren und entsprechend reagieren. Eine Einzelprüfung auf die erste Zeile reicht nicht wenn es sich um wichtige Daten handelt, das ist eher ein Anhaltspunkt mehr aber auch nicht.

Dim gruß As New Gruß("Mit freundlichen Grüßen, FormFollowsFunction :) ")
gruß.Schow()
https://msdn.microsoft.com/de-de/library <- Mal rein schauen! ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel