| Autor |
Beitrag |
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: 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:
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
      
Beiträge: 129
|
Verfasst: Mo 21.04.03 11:42
Hallo,
das Beste wäre es doch: zeig uns einfach mal deine Arrays.
Grüße
Florian 
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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: 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
|
Verfasst: 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:
Quelltext 1:
| FileStream.WriteBuffer(MyArray, SizeOf(MyArray)); |
Sprich es muss keine länge gespeichert werden.
Aber nochmals danke.
Greetz FloF
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 25.04.03 22:12
pack doch die variablen in ein record und speich den ab....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 26.04.03 12:10
ich mache es immmer so:
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ß:
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...."
|
|