AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language [nicht-Profi] Datentyp auf bestimmte Weise darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[nicht-Profi] Datentyp auf bestimmte Weise darstellen

Offene Frage von "Nelphin"
Ein Thema von Nelphin · begonnen am 4. Okt 2011 · letzter Beitrag vom 6. Okt 2011
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.777 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 4. Okt 2011, 22:52
Guten Abend,

schau Dir mal die Routine IntToHex an.

added:

Für das Daten auslesen eventuell einen Record definieren.

Delphi-Quellcode:
type
  TData = record
    firstSegment : LongWord;
    next2Segments : Array[0..1] of Word;
    leftOver : Array[0..7] of Byte;
  end;


Grüße
Klaus
Klaus

Geändert von Klaus01 ( 4. Okt 2011 um 23:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 4. Okt 2011, 23:38
zur Anzeige:
Delphi-Referenz durchsuchenFormat

Einfach einen Formatstring definieren, welcher der Vorgabe entspricht und dann alle Zahlen/Variablen übergeben.
Ist bestimmt schöner, als den string komplett manuell zusammenzusetzen und jeden wert einzeln mit HexToStr umzuwandeln.



Und das mit Record hat den Vorteil, daß du diesen Record nur einmal auslesen mußt und da gleich alle Werte auf einmal aus der datei rausbekommst
anstatt jeden Wert einzeln auszulesen.

PS: besser einen packed Record verwenden > TData = packed record ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Okt 2011 um 23:42 Uhr)
  Mit Zitat antworten Zitat
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 5. Okt 2011, 08:38
Vielen Dank für die Antworten!

leider erziele ich nach wie vor nicht das erwartete Ergebnis.
ich habe zum testen das ganze file durchwandert und immer um 1 byte versetzt ein 4 byte langes DWord ausgelesen.
dieses dann mit inttohex() in einer listbox ausgegeben und dann nach diesen eindeutigen identifizierern gesucht... ohne erfolg.
  Mit Zitat antworten Zitat
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 5. Okt 2011, 15:18
Ich bin durch zufall darauf gekommen das es für diesen Typ eine delphi komponente TGUID zu geben scheint.

zusätzlich habe ich diese Klasse gefunden: http://delphi.about.com/library/weekly/aa022205a.htm

jetzt habe ich meinen code umgebaut:

Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
var
MyGUID:TGuid;
fs: TFilestream;
MyGuidStr:string;
begin
fs:=TFilestream.Create(edit1.Text,fmopenread);

fs.Position:=89;
fs.Readbuffer(MyGUID,16); //leider bekomme ich jetzt hier einen fehler
MyGuidStr:=TGuidex.ToString(MyGuid);
Listbox1.items.add(MyGuidStr);

fs.free;
end;
bekomme aber einen
Zitat:
stream lesefehler
kann mir jemand weiterhelfen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 5. Okt 2011, 15:24
Ich bin durch zufall darauf gekommen das es für diesen Typ eine delphi komponente TGUID zu geben scheint.
Fällt dir was auf?
Code:
deins {3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01}
GUID  {3F2504E0-4F89-11D3-9A0C-0305E82C3301}
(gut, man könnte jetzt einfach noch die zusätzlichen "-" da reinschieben)

//leider bekomme ich jetzt hier einen fehler
Ist die Datei groß genug? (mindestens 105 Byte)


PS: auf BigEndian/LittleEndian müßte man auch mal schauen
(z.B. könnte da auch das mit dem "-" reinschieben schwer werden, wenn die Reihenfolge nicht stimmt)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Okt 2011 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 5. Okt 2011, 15:51
Ich bin durch zufall darauf gekommen das es für diesen Typ eine delphi komponente TGUID zu geben scheint.
Fällt dir was auf?
Code:
deins {3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01}
GUID  {3F2504E0-4F89-11D3-9A0C-0305E82C3301}
(gut, man könnte jetzt einfach noch die zusätzlichen "-" da reinschieben)
das mit den zusätzlichen "-" hatte ich gehofft, weil ansonsten doch die spezifikationen gleich sind: 1x4byte 2x2byte und 8x1byte.
in der datei ist das zeugs ja als bytes und die string darstellung ist ja nur zum manuellen vergleich? (oder übersehe ich da etwas?)
Ist die Datei groß genug? (mindestens 105 Byte)
ich habe einige test dateien für das format, keine ist kleiner als 3kbyte.
PS: auf BigEndian/LittleEndian müßte man auch mal schauen
in dem format gibt es im header ein byte das 1 oder 0 sein kann, das vorgibt in welcher reihenfolge die bytes gespeichert sind...
ich habe demnach hier eine funktion gefunden und ausprobiert was dann herauskommt... diese macht beispielsweise aus 00000002 dann 02000000
aber auch so habe ich keine ID entdecken können weder an den Stellen, wo sie meiner Meinung nach sein müssten, noch beim byteweisen durchkriechen.
deswegen vermute ich das meine typen falsch sind.

EDIT: Lesefehler ist behoben... es liest das zeugs jetzt ein. aber sie stimmen halt nicht... ich probier mal noch ein wenig herum.

Geändert von Nelphin ( 5. Okt 2011 um 16:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen

  Alt 5. Okt 2011, 16:23
mit D2006 läuft folgender Code:
Delphi-Quellcode:
var
  MyGUID:TGuid;
  fs: TFilestream;
  MyGuidStr:string;
begin
  fs:=TFilestream.Create('c:\temp\mydate.doc',fmopenread);
  fs.Position:=89;
  fs.Readbuffer(MyGUID,16); //leider bekomme ich jetzt hier einen fehler
  MyGuidStr:=GuidToString(MyGuid);

  label4.Caption:=MyGuidStr;

  fs.free;
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz