AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen
Thema durchsuchen
Ansicht
Themen-Optionen

Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

Ein Thema von Warp · begonnen am 30. Okt 2014 · letzter Beitrag vom 1. Nov 2014
Antwort Antwort
Seite 1 von 3  1 23      
Warp

Registriert seit: 27. Mai 2006
45 Beiträge
 
Delphi XE4 Professional
 
#1

Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:06
Delphi-Version: XE4
Hallo zusammen,

nach langer Zeit nochmal eine Frage zu Delphi.

Ich möchte mit Delphi XE4 alte Dateien lesen/bearbeiten, die mal mit einem Turbo Pascal 6 Programm unter DOS in Form von typisierten Dateien erzeugt wurden.

Beispiel der Record-Deklaration unter TP6:

T_Settings = Record
ID: Byte;
Baud: Byte;
Line: Byte;
TSN1: Byte;
TSN2: Byte;
TSN3: Byte;
TSN4: Byte;
TSN5: Byte;
TSN6: Byte;
Description: String;
ConnectionDef: String;
end;

Die "Byte"-Elemente lassen sich bei entsprechend deklarierten Typ im XE4-Prog auch scheinbar korrekt lesen, die Dateiinhalte vom Typ String allerdings nicht (was ja vermutlich u.a. daran liegt, dass Delphi >= 2009 den Typ String eben als Unicode String behandelt (DBC).

Ich habe es jetzt mit folgender Typdeklaration in XE4 versucht:

T_Settings_XE4 = Record
ID: Byte;
Baud: Byte;
Line: Byte;
TSN1: Byte;
TSN2: Byte;
TSN3: Byte;
TSN4: Byte;
TSN5: Byte;
TSN6: Byte;
Description: ShortString;
ConnectionDef: ShortString;
end;

Diese führt bezüglich der Stringelemente nicht zu richtig zugeordneten Dateninhalten.

Ich bis jetzt hier noch keinen Thread gefunden, der dafür eine Lösung hat...

Welche Entsprechung hätte heute unter den Gegebenheiten von Delphi >= 2009 (XE4 halt) der TP6-Typ String, um die Daten richtig lesen zu können?

Hat da jemand von euch Erfahrung?

Gruss,

Warp
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:09
Hallo,

stimmt der String überhaupt nicht,
oder sind es die Sonderzeichen (AsciToOem, OemToAsci nehmen).
Ausserdem könntest du noch per SizeOf prüfen, ob die Record-Variablen nicht anders ausgerichtet sind
(packed record wäre viel. eine Lösung).

The ShortString type holds sequences of characters up to 255 in length.
Der TP6 String war aber immer ein String[255], probier mal Shortstring[255] (habe gerade keine XE4 hier).

Heiko
Heiko

Geändert von hoika (30. Okt 2014 um 18:13 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:22
Lies mal ab hier
http://www.delphipraxis.net/175696-d...ml#post1223358
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#4

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:29
Zitat:
(was ja vermutlich u.a. daran liegt, dass Delphi >= 2009 den Typ String eben als Unicode String behandelt (DBC).
String ist in Delphi (k.A. seit wann, aber mindestens seit Delphi 2) ein LongString.

Vor D2009 war String ein Alia für den AnsiString und danach für den UnicodeString.
Gaaaaaaanz früher war der String das, was seit Einführung der LongStrings, nun der ShortString ist.
String[x] ist ein ShortString mit Längenangabe (maximale Länge).
Und String[255] ist der größt mögliche ShortString, also somit direkt der Typ ShortString.

Wie sehen denn die binären Daten eines Records in der Datei aus?
Bzw. was steht denn nun im ersten Record, nach dem Auslesen? (die Bytes stimmen also, aber was steht in dem ersten String)




Eventuell kann man es auch mal mit einem T_Settings = packed Record versuchen, bzw. mit {$ALIGN ...} rumspielen.

Kann es sein, daß er erste Record noch stimmt, aber die nachfolgenden nicht mehr? Auch das könnte am Align liegen, denn die Daten in deinem Record sind 9*1+2*256 Byte groß. (1 Byte zu groß, für ein Align von 4 oder 8)

Du hast nicht zufällig noch TP6 installiert?
Wie groß ist dort denn ein SizeOf(T_Settings) und wie groß im Delphi?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Okt 2014 um 18:39 Uhr)
  Mit Zitat antworten Zitat
Warp

Registriert seit: 27. Mai 2006
45 Beiträge
 
Delphi XE4 Professional
 
#5

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:42
Erstmal danke für die schnellen Antworten.

@Hoika & Himizu
Die Inhalte sind ohne Probleme lesbar, allerdings verschoben. Beginnen also nicht am Anfang des Elements (StringElement[01]), sondern irgendwo in der Mitte. So als wenn "ein Zeiger irgenwo in die Mitte der Daten gegriffen hätte" bei Einlesen der Inhalte.

Ich werde das jedenfalls morgen auch noch mal mit ShortString[255] probieren (auch wenn ich meine, der wäre - wie Himizu schon sagt - eh schon mit Länge 255 vorbelegt. Die Ausrichtung kann mir allerdings sicher auch ein Schnippchen schlagen. Ich muss mir die einzeknen Datenverschiebungen noch genauer ansehen. Da haben ja selbst die einzelnen Delphi-Versionen der letzten Jahre ihre Unterschiede.

Jede Datei hat übrigens nur einen Record gespeichert. "Verschiebungsbilder" zwischen einzelnen Records dahinter kann es also nicht geben. Ja und die Byteinhalte stimmen halt Byte für Byte, was sich mit einem Hexeditor ja einfach nachprüfen lässt.

@Günther
Keine Ahnung ob man sie nicht mehr verwenden darf. XE4 compiliert jedenfalls ein solches Konstrukt ohne Probleme durch.

Grüsse,

Warp
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:45
@Günther
Keine Ahnung ob man sie nicht mehr verwenden darf. XE4 compiliert jedenfalls ein solches Konstrukt ohne Probleme durch.
Ich hatte extra auf die Stelle in der Diskussion verlinkt wo es dann speziell um Turbo Pascal und Delphi heute ging mit Packed Records, Strings und allem.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#7

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 18:46
sondern irgendwo in der Mitte. So als wenn "ein Zeiger irgenwo in die Mitte der Daten gegriffen hätte" bei Einlesen der Inhalte.
Die ersten 3 oder 7 Zeichen fehlen, beim ersten Record?
> Nimm das PACKED.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Warp

Registriert seit: 27. Mai 2006
45 Beiträge
 
Delphi XE4 Professional
 
#8

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 19:10
@Günther
Nicht das das falsch rüberkommt, ich möchte deinen Input (File of Record benutzen "ja/nein") nicht ignorieren o.ä..

Ich will nur erstmal hören, was andere für Erfahrungen mit dem Thema gemacht haben. Was dann als möglicher Weg für mich herauskommt, wird sich dann zeigen (hoffentlich). Mir würde es eventuell schon reichen, wenn ich die vorhandenen alten Daten in ein akuelles (zukunfsträchtigeres) Format konvertieren könnte.

Der zu treibende Aufwand entscheidet halt auch (wie immer) mit.

Gruss,

Warp
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 21:14
Die Inhalte sind ohne Probleme lesbar, allerdings verschoben. Beginnen also nicht am Anfang des Elements (StringElement[01]), sondern irgendwo in der Mitte. So als wenn "ein Zeiger irgenwo in die Mitte der Daten gegriffen hätte" bei Einlesen der Inhalte.
Könntest Du das vllt. nochmals erklären?

Leider weiß ich nicht mehr mit welchem Allignment TP6 arbeitet, darum wäre es ganz gut zu wissen was an Daten vorhanden ist.
Liegt kein Alignment vor (packed Record) sollte die Daten so aussehen
  1. 0 - ID
  2. 1 - Baud
  3. 2 - Line
  4. 3 - TSN1
  5. 4 - TSN2
  6. 5 - TSN3
  7. 6 - TSN4
  8. 7 - TSN5
  9. 8 - TSN6
  10. 9 - LängenByte Description
  11. 10 - Description_1
  12. 11 - Description_2
  13. ... usw.

Ggf. mußt Du ein PackedRecord mit eingeschobenen Dummy-Bytes definieren um das richtige Format zu erreichen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

AW: Turbo Pascal 6 erzeugte Dateien mit Delphi XE4 lesen

  Alt 30. Okt 2014, 23:39
Ist bekannt, wieviele Datensätze in der alten Datei vorhanden sind ? Wenn ja : teile die Dateigrösse durdh Anzahl Datensätze + 1. Kommt Ganzzahl dabei raus, dann ist das die Datensatzgrösse. Die + 1 kommt daher, weil im Datensatz Nr. 0 eventuell die Datensatz Definition enthalten ist. Dann gehts eben weiter mit tüfteln. Bevor ich aber anfange, einzelne Datensätze zu zerpflücken (wegen Feldgrösse), ist erst mal wichtig, ob das alles überhaupt linear läuft, also bei gleichen Datensatzgrössen oder ob da tatsächlich packed und ähnliche Spezialitäten zum Einsatz kommen. Glaubs eher nicht.

Aber Achtung ! Das Ganze funktioniert nur (wenn überhaupt) mit dateien mit eigener Index-Datei. Zuerst also mal gucken, ob es nur eine Datenbank-Datei gibt, oder ob da noch DATENBANK.IX, *.IDX usw. Dateien vorhanden sind. Bei nur einer datei siehts schlecht aus,
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz