Autor Beitrag
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.04.03 18:50 
Hallo, ich brauche dringend und schnell Hilfe!

Wie kann ich ein dynamisches, mehrdimensionales Array mit nem filestream speichern? Geht das überhaupt?
Wenn da jemand auf die Schnelle ein paar Codeteile hat, dann wäre das natürlich super.
Danke schon mal für eure Antworten.

Greetz FloF
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: So 20.04.03 00:44 
Hallo FloF!

Wenn du mir sagst welche Daten der Array beinhaltet und wie ich herausbekomme, wieviel Ebenen es gibt, dann kann ich dir helfen!

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 20.04.03 09:07 
Also:
Ich hab sowohl Arrays mit Integer als auch mit String.
Die Arrays mit String haben zweimal nur eine dimension und einmal is es ne matrix.
Die Arrays mit Integer haben einmal 2 Dimensionen und einmal 4.
Bei den mehrdimensionalen Arrays sind in der 2. bzw 3. und 4. Dimension verschiedene Längen enthalten.

So, das wärs dann soweit auch schon. Wäre ne super sache, wenn du mir da helfen könntest.

THX schon mal im Voraus

FloF
Lehrling
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 20.04.03 10:14 
Hallo,

Zitat:
Ich hab sowohl Arrays mit Integer als auch mit String.


Das mit Strings ist so ne sache, da AnsiStrings Pointer sind.

Zitat:
Die Arrays mit String haben zweimal nur eine dimension und einmal is es ne matrix.


Was verstehst du unter Matrix?

Zitat:
Bei den mehrdimensionalen Arrays sind in der 2. bzw 3. und 4. Dimension verschiedene Längen enthalten.


Einfach die Längen speichern und dann den Array.


mfg Lehrling
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.04.03 11:03 
1) Es sind keine AnsiStrings

2) Matrix = 2 Dimensionen, Entschuldigung für die undeutliche Ausdrucksweise

3) Das klingt ja relativ einfach. ich kann aber nicht ganz glauben dass es so geht. Aber um ohne lang drum herum zu reden, meintest du es so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
...
filestream.WriteBuffer(Length(mArray), SizeOf(Length(mArray)));
for i:=0 to High(myArray) do
  filestream.WriteBuffer(Length(myArray[i]), SizeOf(Length(mArray[i])));
filestream.WriteBuffer(myArray, SizeOf(myArray));
...


mfg FloF
FloSch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 129



BeitragVerfasst: Mo 21.04.03 11:42 
Hallo,

das Beste wäre es doch: zeig uns einfach mal deine Arrays.

Grüße
Florian :roll:
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 21.04.03 21:15 
Hallo FloF!

Nurmalerweise geht es ganz einfach: Du musst zunächst die Länge des Arrays speichern und dann einfach den Array durchgehen und die einzlenen Daten speichern. Bei Strings musst du zusätzlich die Länge speichern. Das awrs auch schon.
Jetzt habe ich noch ein Ausschnit aus einer Klasse die das Speichern von Strings vereinfacht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TFileStreamEx.WriteString(const S: String;
  const WriteLength: Boolean = True);
var
  Len: Word;
begin
  Len := Length(S);
  if WriteLength then
    Write(Len, SizeOf(Len));
  if Len > 0 then
    Write(Pointer(S)^, Len);
end;

function TFileStreamEx.ReadString(const Len: Word): String;
begin
  SetLength(Result, Len);
  if Len > 0 then
    Read(Pointer(Result)^, Len);
end;

function TFileStreamEx.ReadString: String;
var
  Len: Word;
begin
  Read(Len, SizeOf(Len));
  Result := ReadString(Len);
end;
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.04.03 21:24 
Danke für deine Hilfe wulfskin. Ich werd das ganze gleich einbauen.
ich dachte mir nur, dass es vielleicht auch eine einfachere Variante gibt. Soweit ich informiert bin funktioniert das speichern von statischen Arrays durch ein simples:

ausblenden Quelltext
1:
FileStream.WriteBuffer(MyArray, SizeOf(MyArray));					


Sprich es muss keine länge gespeichert werden.
Aber nochmals danke.

Greetz FloF
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 21.04.03 21:46 
FloF hat folgendes geschrieben:
Sprich es muss keine länge gespeichert werden.
Jo, ist leider so. Aber man kann Delphi verstehen ;). Woher soll es auch wissen, wi lange die Strings sind!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 25.04.03 22:12 
pack doch die variablen in ein record und speich den ab....

_________________
MFG
Michael Springwald, "kann kein englisch...."
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 25.04.03 23:24 
mimi hat folgendes geschrieben:
pack doch die variablen in ein record und speich den ab....
wulfskin hat folgendes geschrieben:
Bei Strings musst du zusätzlich die Länge speichern. Das wars auch schon.
Das gilt genauso für Strings, die im Record gespeichert sind...

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 26.04.03 12:10 
ich mache es immmer so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  for y:=indexof('Draw_Karte {')+1 to IndexOf('Draw_Karte }')-1 do begin
      for x:=0 to MapX+1 do begin
        str:=Strings[y];
        if (str[x] = '#') and (Map[x-1,y-indexof('Draw_Karte {')-1].typ = None) then begin // Eine Wand
          Map[x-1,y-indexof('Draw_Karte {')-1].typ:=wand;
          Continue;
        end;
                              
        if str[x] in ['A'..'Z'] then begin // Eine PlatteY
          SetLength(Platten, HIGH(Platten)+2);
          Platten[HIGH(Platten)].x:=x-1;
          Platten[HIGH(Platten)].y:=y-indexof('Draw_Karte {')-1;
          Platten[HIGH(Platten)].Typ:=PlateX;
          Platten[HIGH(Platten)].Speed:=ord(Str[x])+1-65;
          Platten[HIGH(Platten)].run:=True;
          Platten[HIGH(Platten)].PlayerColi:=False;

          Continue;
        end;

und dabei kommt dann sowas rauß:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
Optionen {
  DefaultExt:bmp
  Images:~bilder
  Game_Backgrund:~backgrund
  Player_Pos:1,22
}

Draw_Karte {
########################################
#                                      #
###################################### #
#     |      |       |       |    |    #
#                                    G #
#                                      #
#      |      |         |              #
#                                      #
#K                                     #
# |      |       |       |            |#
# ######################################
#L                  z                 L#
#M                                    M#
###################################### #
#||# j   |                       |    -#
#  #  #                               -#
#  #  #      -                         #
#  #  #                                #
#     #-                               #
#     #                 -              #
#     #-         |                    |#
# ##  ##################################
#   u                                 -#
########################################
Draw_Karte }

_________________
MFG
Michael Springwald, "kann kein englisch...."