Benutzer mit den meisten Antworten
Datenkapselung

Frage
-
Hallo,
bin mir nicht sicher ob der Titel richtig ist, falls nicht , sorry.
Folgendes Problem, ich habe mehrere Dateien die ich verarbeiten will. Allen Dateien haben gemein, dass die darin enthaltenen
Daten immer eine feste Länge haben, sprich Datei_1 hat zum Beispiel den Inhalt AAA01072011BBB01072011CCC30062011.
Was für mich heisst, 3 Datensätze mit ID und Datum
ID Datum
AAA 01072011
BBB 01072011
CCC 30062011.
Eine Datei_2 hat vielleicht jene Daten 001AAA011BBB071CCC
was wiederum heisst 3 Datensätze mit Retry und ID
Retry ID
001 AAA
011 BBB
071 CCC
Wie ihr seht, ist das ID Feld gleich. Dies ist bei allen Datenfelder so, sodass ich mich fragte ob es nicht einfacher wäre wenn ich
eine Klasse mit Datenfeldern erstelle und weitere Klasse, welche Strukturen mit diesen DatenFeldern halten.
Wenn sich dann die Größe eines Datenfeldes ändert, brauche ich dies nur in der Klasse zu tun, welche die DatenFelder beschreibt.
Soweit die Theorie - nur wie macht man das in der Praxis?
Mein Versuch dies so zu lösen
Public Class DataField Friend _ID as Char(3) Friend _date as Char(8) Friend _retry as Char(3) End Class Public Class Connections Structure Retry Dim _id as DataField._ID Dim _retry as DataField._retry End Structure End Class
geht nicht, da
a) ich die Char Arrays nicht mit konstanter Grösse deklarieren/initialisieren kann
Muss ich da üner das Marshalling gehen, oder gibt es alternativen
b) in der Klasse conncetion bekomme ich den Hinweis das es z. B. den Typ DataField_ID nicht gibt.
Habt Ihr eine Idee, wie ich das besser mache?
Danke
Reinhard
Antworten
-
Hallo Reinhard,
ein ähnliches Problem hatte Ellen Ramcke in Ein Telegramm in eine Datenstruktur casten. Wie?
Zuerst: Verwende durchweg String, dort wo Du eine Zeichenkette erwartest - auch wenn die eine feste Länge hat.
Denn mit Char-Arrays kann man nur sehr schlecht weiterarbeiten, sei es für Vergleiche, Zuweisungen uam.Dann mache aus den Feldern jeweils eine Eigenschaft, so dass Du die Länge, Dateninhalt usw. kontrollieren kannst.
Beim Lesen/Schreiben kannst Du ähnlich wie im obigen Beispiel die Datenstruktur zerlegen und später wieder zusammenfügen,
entweder wie bei Ellen gezeigt oder auch über einen BinaryReader/-Writer.Was das Ableiten angeht:
So funktioniert das generell nicht. Du könntest Dir zwar etwas bauen wieFriend Structure IDDatenTyp Public Property Value As String End Structure Friend Structure RetryDatenTyp Public Property Value As String End Structure ' und zusammenbauen Friend Class Connections Friend ID As IDDatenTyp Friend Retry As RetryDatenTyp End Class
(Ich habe der Kürze halber eine AutoProperty verwendet, um die Länge und Datenwerte zu kontrollieren, verwende eine explizite Eigenschaft).
Das bringt aber in den meisten Fällen nur wenig, außer zusätzliche Schreibarbeit.
Denn passt bei der Verarbeitung was nicht, so bleibt es am Ende doch bei einer Ausnahme (Excption),
wo es dann nicht mehr weitergehen würde.
Ergo: Richtig kodiert werden muss das Ganze bereits beim Lesen/Schreiben und später bei der Verarbeitung.
Für eine Eingabeprüfung kann sinnvoller sein, eine zusätzliche Validation wie die DataAnnotations zu verwenden.Gruß Elmar
- Als Antwort markiert ReinhardH Freitag, 1. Juli 2011 23:04
Alle Antworten
-
Hallo Reinhard,
ein ähnliches Problem hatte Ellen Ramcke in Ein Telegramm in eine Datenstruktur casten. Wie?
Zuerst: Verwende durchweg String, dort wo Du eine Zeichenkette erwartest - auch wenn die eine feste Länge hat.
Denn mit Char-Arrays kann man nur sehr schlecht weiterarbeiten, sei es für Vergleiche, Zuweisungen uam.Dann mache aus den Feldern jeweils eine Eigenschaft, so dass Du die Länge, Dateninhalt usw. kontrollieren kannst.
Beim Lesen/Schreiben kannst Du ähnlich wie im obigen Beispiel die Datenstruktur zerlegen und später wieder zusammenfügen,
entweder wie bei Ellen gezeigt oder auch über einen BinaryReader/-Writer.Was das Ableiten angeht:
So funktioniert das generell nicht. Du könntest Dir zwar etwas bauen wieFriend Structure IDDatenTyp Public Property Value As String End Structure Friend Structure RetryDatenTyp Public Property Value As String End Structure ' und zusammenbauen Friend Class Connections Friend ID As IDDatenTyp Friend Retry As RetryDatenTyp End Class
(Ich habe der Kürze halber eine AutoProperty verwendet, um die Länge und Datenwerte zu kontrollieren, verwende eine explizite Eigenschaft).
Das bringt aber in den meisten Fällen nur wenig, außer zusätzliche Schreibarbeit.
Denn passt bei der Verarbeitung was nicht, so bleibt es am Ende doch bei einer Ausnahme (Excption),
wo es dann nicht mehr weitergehen würde.
Ergo: Richtig kodiert werden muss das Ganze bereits beim Lesen/Schreiben und später bei der Verarbeitung.
Für eine Eingabeprüfung kann sinnvoller sein, eine zusätzliche Validation wie die DataAnnotations zu verwenden.Gruß Elmar
- Als Antwort markiert ReinhardH Freitag, 1. Juli 2011 23:04