![]() |
Array of Bytes dynamisch erstellen
Hallo Friends,
besteht die Möglichkeit, dass ich: myBytes: Array[0..byteCount -1] of Byte; dynamisch umwandeln kann ungefähr so myBytes: Array[x..y] of Byte; (wo x und y als Integer Variable werden ? Bis jetzt habe ich wie folgt benutzt: selectedFile := lblFilePath.Caption ; fileStream := TFile.Open(selectedFile, TFileMode.fmOpen); try if fileStream.Seek(startByte, TSeekOrigin.soBeginning) < startByte then raise Exception.Create('file is too small'); if fileStream.Read(myBytes, byteCount) < byteCount then raise Exception.Create('file is too small'); myString := TEncoding.ANSI .GetString(myBytes); finally fileStream.Destroy(); end; Thanks and have a great Time :) |
AW: Array of Bytes dynamisch erstellen
Nein, da
Delphi-Quellcode:
ein statisches Array ist, welches bereits der Compiler so lang macht, bevor dein Programm überjaupt läuft.
Array[x..y] of irgendwas
x und y können dürfen nur Konstanten sein. Aber bei einem dynamischen Array ala
Delphi-Quellcode:
da kann man zur Laufzeit mit SetLength arbeiten.
array of irgendwas
TArray<irgendwas> // die Variante von "array of irgendwas" mit Generics (seit Delphi2009) TBytes // was ein "eigener" Typ ähnlich "array of Byte" ist ... Dynamische Arrays fangen aber immer bei 0 an. Es bliebe noch das viariante Array, also Typ Variant in dem ein Array reingepackt wird, oder eine Klasse mit Array-Property, wo du selbst den Index des Property z.B. auf den Index einer dynamischen Array-Variable abbildest. Zitat:
|
AW: Array of Bytes dynamisch erstellen
Danke für die Hilfe :
meinst du so : var v: array of byte; i,j:integer; begin j := 1000; setlength(v, j); for i:=40 to j do begin myString := TEncoding.ANSI .GetString(v); end; end; Leider funktioniert nicht........ Need Help.... please !!!!!!!!!!! |
AW: Array of Bytes dynamisch erstellen
Delphi-Quellcode:
dynamische Array beginnen bei 0
for i:=40 to j- 1 do
begin myString := TEncoding.ANSI .GetString(v); end; Enden dann bei Anzahl der Elemente -1 Grüße Klaus |
AW: Array of Bytes dynamisch erstellen
Wenn Du Dir die Schreibweise
Delphi-Quellcode:
angewöhnst, dann kannst Du nichts falsch machen. Low(..) und High(..) funktioniert sowohl bei dynamischen, wie auch bei statischen Arrays.
For i:= Low(IregendEinArrray) To High(IregendEinArrray) Do
Begin … End; Gruß, Andreas |
AW: Array of Bytes dynamisch erstellen
Zitat:
Ein Buffer mit 1000 Bytes.. OK und dann 960x ab dem 1. byte den gleichen String lesen? Was versucht Du zu erreichen? Mavarik :coder: |
AW: Array of Bytes dynamisch erstellen
Hallo Mavarik,
ich möchte gern ein Binär Datei Blockweise ( z.B erster Block von 22ten Byte bis 200ten Byte und nächster Block zwichen 220 - 816ten Bytes usw..) splitten und in einen DB (Firebird) abspeichern und später je nach Bedarf die ausgewählte Blöcke wieder zusammen in eine Binär Datei schreiben. Die Start-und- Endbytes der Blöcke werden vorher aus Binär gerechnet Alles habe ich bereits im Jahr 2001 in Visual Basic 6 und MDB Datenbank realisiert. Quellcode kann ich zur Verfügung stellen. Delphi für mich relativ neu ist daher habe ich Probleme..... :-( |
AW: Array of Bytes dynamisch erstellen
Zitat:
Also abgesehen davon, dass ich das in einem Blobfeld dann speichern würde... Ich gehe davon aus, dass es sich bei den Bin-Daten um Strings handelt? Also Du hast also fixe Start-Positionen und fixe Längen vorberechnet? Nach dem Motto... Start 22 Len 188 Start 220 Länge x... Also sagen wir mal Du hat einen Record:
Delphi-Quellcode:
So zum Beispiel...
Type
Parts = Record Start : Integer; Len : Integer; end; PartsList : TArray<Parts>; // oder mit altem Delphi Array of Parts; var MS : TMemoryStream; S : AnsiString; i : Integer; begin FillPartsList(PartsList); MS := TMemoryStream.Create; try MS.LoadFromFile('Bindaten.Dat'); for i:=0 to high(PartsList) do begin Setlength(S,PartList[i].Len); MS.Position := PartsList[i].Start; Move(MS.Memory^,S[1],PartList[i].Len); WriteToFirebird(S); end; finally MS.Free; end; end. Eine von unzähligen Möglichkeiten... Mavarik :coder: |
AW: Array of Bytes dynamisch erstellen
Das nenne ich Hife von feinsten.........
Mit FileStream Position bin auch weiter gekommen aber deine Lösung ist vieeeeel besser. Danke Mavarik for your kind help |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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-2025 by Thomas Breitkreuz