| |
VB.NET - FortgeschritteneRe: Einlesen von Datenstrukturen aus einer Datei (erzeugt mit einer anderen Sprache) | | | Autor: Schudi | Datum: 20.11.18 12:16 |
| Hallo Manfred X,
und erst einmal vielen Dank für Deine Antwort.
Insbesondere der 2. Artikel war mir bekannt, aber es geht hier nicht um die Übergabe als Parameter sondern um einen String, der aus einer Datei gelesen wird.
Ich konkretisiere meine Anfrage mal ein wenig...
Als Beispiel nehme ich die Struktur aus meinem gestrigen Post...
Im Cobol sieht die Beschreibung so aus:
02 PFAmc pic x(10) Wert Klartext: ABCDEFGHIJ Wert hex: 41 42 43 44 45 46 47 48 49 4A
02 PFAnum pic 999 comp-6. Wert Klartext: 115 Wert hex: 01 15
02 PFAbez pic x(10). Wert Klartext: Text Wert hex: 54 65 74 78 20 20 20 20 20 20
02 PFAvki pic s9(5)v99 comp-5. Wert Klartext: 0,08 Wert hex: 08 00 00 00
02 PFAvoll Pic s9(8) comp-5. Wert Klartext: 33377- Wert hex: 9F 7D FF FF
02 PFAleer Pic s9(8) comp-5. Wert Klartext: 557 Wert hex: 2D 02 00 00
In der Datei, und somit in dem String, den ich aus der Datei einlese, sieht das so aus (in Hex):
Klartext:"ABCDEFGHIJ Text Ÿ}ÿÿŸ}ÿÿ" insgesamt 34 Byte
in hex:" 54 65 74 78 20 20 20 20 20 20 08 00 00 00 9F 7D FF FF 2D 02 00 00"
Ausgehend von dem ersten Dokument müsste das folgender Structure entsprechen:
Structure Artikel
Dim Mc As String
Dim Num As Integer
Dim Bez As String
Dim Vki As Integer
Dim AnzVol As Integer
Dim AnzLer As Integer
End Structure Da VB.net keine String-Variablen mit fester Länge kennt, muss ich doch alle "Felder" einzeln aus dem String ausschneiden und in die Zielfelder übertragen, oder?
Für die Textfelder ist das noch recht einfach:
Public Sub SatzZerlegen(SatzGelesen As String)
Dim myArtikel As New Artikel
'Zuerst die Textfelder
myArtikel.Mc = Mid(SatzGelesen, 1, 10)
myArtikel.Bez = Mid(SatzGelesen, 15, 10)
End Sub Aber jetzt kommen die numerischen Felder:
Die Definition S9(8) Comp-5 (4 Byte) entspricht einer Int32. Soweit ist das klar.
In der Datei stellen sich die 4 Byte in Hex wie folgt dar: 08 00 00 00
Aber ich kann mir nicht vorstellen, dass der folgende Code schon ausreicht bzw. funktioniert...
...
myArtikel.vki = CInt(Mid(SatzGelesen, 26, 4)) Und spätestens für die Comp-6 definierten Felder gibt es keine Entsprechung - auch in dem genannten Dokument nicht.
Nehmen wir die Nummer : 115 im Klartext
In der Datei stellen sich die 2 Byte in Hex wie folgt dar: "01 15"
Je Ziffer also ein Halbbyte und das Ganze rechtsbündig.
Wie bekomme ich das jetzt in eine Integer? Hier muss ich doch umrechnen, oder? Aber wie?
Oder anders ausgedrückt: Wie wird aus dem 2 Byte langen String hex "01 15" wieder die Zahl 115?
Ich entschuldige mich schon mal für den langen Text und meine umständliche Erklärung, aber vielleicht ist mein Problem jetzt deutlicher geworden... | |
| 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 |
|
|
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 InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|