| |
VB.NET - Ein- und UmsteigerDatei 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ß | |
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 | |
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 | |
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. | |
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. | |
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 | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|