AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array of Bytes dynamisch erstellen

Ein Thema von Gandimann · begonnen am 30. Nov 2020 · letzter Beitrag vom 3. Dez 2020
Antwort Antwort
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#1

Array of Bytes dynamisch erstellen

  Alt 30. Nov 2020, 22:09
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
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?

Geändert von Gandimann (30. Nov 2020 um 22:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.670 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Array of Bytes dynamisch erstellen

  Alt 30. Nov 2020, 22:22
Nein, da Array[x..y] of irgendwas ein statisches Array ist, welches bereits der Compiler so lang macht, bevor dein Programm überjaupt läuft.
x und y können dürfen nur Konstanten sein.

Aber bei einem dynamischen Array ala
Delphi-Quellcode:
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
...
da kann man zur Laufzeit mit SetLength arbeiten.

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:
TEncoding.ASCII.GetString(myBytes); -----> myBytes muss ich durch variabeln anpassen können.
Hättest du mal nachgesehn, was GetString für einen Parameter haben möchte, und schon hättest du auch gewusst, welchen Typen deine Variable myBytes benötigt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (30. Nov 2020 um 22:46 Uhr)
  Mit Zitat antworten Zitat
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#3

AW: Array of Bytes dynamisch erstellen

  Alt 30. Nov 2020, 22:36
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 !!!!!!!!!!!
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?

Geändert von Gandimann ( 1. Dez 2020 um 02:08 Uhr)
  Mit Zitat antworten Zitat
Klaus01

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

AW: Array of Bytes dynamisch erstellen

  Alt 1. Dez 2020, 06:17
Delphi-Quellcode:
for i:=40 to j- 1 do
begin
myString := TEncoding.ANSI .GetString(v);
end;
dynamische Array beginnen bei 0
Enden dann bei Anzahl der Elemente -1

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
526 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Array of Bytes dynamisch erstellen

  Alt 1. Dez 2020, 08:58
Wenn Du Dir die Schreibweise
Delphi-Quellcode:
For i:= Low(IregendEinArrray) To High(IregendEinArrray) Do
Begin

End;
angewöhnst, dann kannst Du nichts falsch machen. Low(..) und High(..) funktioniert sowohl bei dynamischen, wie auch bei statischen Arrays.
Gruß, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.069 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Array of Bytes dynamisch erstellen

  Alt 1. Dez 2020, 09:15

Delphi-Quellcode:
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 !!!!!!!!!!!
Emm...
Ein Buffer mit 1000 Bytes.. OK
und dann 960x ab dem 1. byte den gleichen String lesen?

Was versucht Du zu erreichen?

Mavarik
  Mit Zitat antworten Zitat
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#7

AW: Array of Bytes dynamisch erstellen

  Alt 1. Dez 2020, 14:33
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.....
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.069 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Array of Bytes dynamisch erstellen

  Alt 2. Dez 2020, 23:29
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.....
OK...

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:
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.
So zum Beispiel...

Eine von unzähligen Möglichkeiten...

Mavarik
  Mit Zitat antworten Zitat
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#9

AW: Array of Bytes dynamisch erstellen

  Alt 3. Dez 2020, 23:26
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
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf