Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 17.11.2007, 11:44 Titel: Type mit bsave abspeichern? |
|
|
kann ich ein relativ komplexe type mit bsave in eine datei abspeichern und später wieder laden?
Meine versuche funzen vorne und hinten nich.. seltsamerweise funzen bsave und bload eh nur wenn ich in einen höheren screenmodus wechsle. In der reinen textkonsole klappts nich. zeigt segmentation fault an... |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 17.11.2007, 12:31 Titel: |
|
|
Hi,
bsave gehört zu Grafiklib (FBgfx) von Freebasic, funktioniert nur wenn Grafikbefehle wie 'Screen' benutzt werden.
Zum Abspeichern von Variablen eignet es sich gar nicht.
Schau lieber nach "open" - Anweisungen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 17.11.2007, 13:40 Titel: |
|
|
hmm .. also ich müsste ne datei als binary öffnen und dann alle daten startend bei der addresse einer variable..
Aber wie bekomm ich die größe eines types raus?
Ich muss ja wissen bis wo hin ich die daten ablesen muss.. wenn das überhaupt geht...
z.B.
Code: |
type grossestype
feld(1 to 100) as integer
beschreibung as string
zaehler as ubyte
end type
dim grossevar as grossestype
grossevar.beschreibung = "Dies ist ein langer variabler string"
|
Wie bekomme ich nun die größe von "grossevar" ? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.11.2007, 13:44 Titel: |
|
|
bei VB geht zumindest folgendes, in FB nicht getestet...
Code: |
Type...
End Type
Dim Variable as TypName
Open "Datei" for binary as #1
Put #1,,Variable
close #1
|
Es kann sein, dass es bei Strings mit variabler Länge nicht funktioniert, das habe ich nicht getestet... Aber theoretisch müsste es funktionieren. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 17.11.2007, 14:57 Titel: |
|
|
Wenn alle Daten eines UDTs eine feste Größe haben (bei Zahlen ist das ja sowieso so, aber bei Strings z. B. funktioniert das dann nur mit fester Länge), dann ist das Lesen und Schreiben des UDTs kein Problem. Mit Strings variabler Länge wird es tatsächlich komplizierter (jedenfalls meinen Erfahrungen nach). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 17.11.2007, 18:34 Titel: |
|
|
Des klappt fast so wie es sollte. Quitiert aber mitner kryptischen fehlermeldung die ausführung nach ablauf des programms:
Code: |
type komplex
t1 as string
t2 as string
i1 as integer
i2 as integer
b1 as ubyte
b2 as ubyte
end type
dim k1 as komplex
k1.t1 = "ABCDEFGHIJK"
k1.t2 = "XYZ"
k1.i1 = 123456
k1.i2 = 765432
k1.b1 = 128
k1.b2 = 123
dim f as integer = freefile
open "t1.dat" for binary as #f
put #f,,k1
close #f
dim k2 as komplex
f = freefile
open "t1.dat" for binary as #f
get #1,0,k2
close #f
print k2.t1
print k2.t2
print k2.i1
print k2.i2
print k2.b1
print k2.b2
|
Als ausgabe erscheint dann:
ABCDEFGHIJK
XYZ
123456
765432
128
123
*** glibc detected *** ./tm: double free or corruption (fasttop): 0x08055e80 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7ed3d65]
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7ed7800]
./tm[0x804ae49]
./tm[0x8049540]
./tm[0x804943e]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7e80050]
./tm[0x8049211]
======= Memory map: ========
08048000-0804e000 r-xp 00000000 08:03 403864 /home/christian/fbusr/tm
0804e000-0804f000 rwxp 00006000 08:03 403864 /home/christian/fbusr/tm
0804f000-08075000 rwxp 0804f000 00:00 0 [heap]
b7400000-b7421000 rwxp b7400000 00:00 0
b7421000-b7500000 ---p b7421000 00:00 0
b75e2000-b75e3000 ---p b75e2000 00:00 0
b75e3000-b7de4000 rwxp b75e3000 00:00 0
b7de4000-b7e20000 r-xp 00000000 08:03 435535 /lib/libncurses.so.5.6
b7e20000-b7e28000 rwxp 0003b000 08:03 435535 /lib/libncurses.so.5.6
b7e28000-b7e2a000 r-xp 00000000 08:03 468868 /lib/tls/i686/cmov/libdl-2.6.1.so
b7e2a000-b7e2c000 rwxp 00001000 08:03 468868 /lib/tls/i686/cmov/libdl-2.6.1.so
b7e2c000-b7e40000 r-xp 00000000 08:03 468888 /lib/tls/i686/cmov/libpthread-2.6.1.so
b7e40000-b7e42000 rwxp 00013000 08:03 468888 /lib/tls/i686/cmov/libpthread-2.6.1.so
b7e42000-b7e45000 rwxp b7e42000 00:00 0
b7e45000-b7e68000 r-xp 00000000 08:03 468870 /lib/tls/i686/cmov/libm-2.6.1.so
b7e68000-b7e6a000 rwxp 00023000 08:03 468870 /lib/tls/i686/cmov/libm-2.6.1.so
b7e6a000-b7fae000 r-xp 00000000 08:03 468862 /lib/tls/i686/cmov/libc-2.6.1.so
b7fae000-b7faf000 r-xp 00143000 08:03 468862 /lib/tls/i686/cmov/libc-2.6.1.so
b7faf000-b7fb1000 rwxp 00144000 08:03 468862 /lib/tls/i686/cmov/libc-2.6.1.so
b7fb1000-b7fb4000 rwxp b7fb1000 00:00 0
b7fb6000-b7fc0000 r-xp 00000000 08:03 435523 /lib/libgcc_s.so.1
b7fc0000-b7fc1000 rwxp 0000a000 08:03 435523 /lib/libgcc_s.so.1
b7fc1000-b7fc5000 rwxp b7fc1000 00:00 0
b7fc5000-b7fdf000 r-xp 00000000 08:03 435476 /lib/ld-2.6.1.so
b7fdf000-b7fe1000 rwxp 00019000 08:03 435476 /lib/ld-2.6.1.so
bffce000-bffe4000 rwxp bffce000 00:00 0 [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
Aborted (core dumped) |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 18.11.2007, 11:30 Titel: |
|
|
Hey,
also bei mir klappts so:
Code: |
TYPE komplex
t1 AS ZString * 100
t2 AS ZSTRING * 100
i1 AS INTEGER
i2 AS INTEGER
b1 AS UBYTE
b2 AS UBYTE
END TYPE
DIM k1 AS komplex
k1.t1 = "ABCDEFGHIJK"
k1.t2 = "XYZ"
k1.i1 = 123456
k1.i2 = 765432
k1.b1 = 128
k1.b2 = 123
DIM f AS INTEGER = FREEFILE
OPEN "t1.dat" FOR BINARY AS #f
PUT #f,,k1
CLOSE #f
DIM k2 AS komplex
f = FREEFILE
OPEN "t1.dat" FOR BINARY AS #f
GET #1,0,k2
CLOSE #f
PRINT k2.t1
PRINT k2.t2
PRINT k2.i1
PRINT k2.i2
PRINT k2.b1
PRINT k2.b2 |
MfG Caran |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.11.2007, 15:54 Titel: |
|
|
Hi,
es muss nicht ZSTRING *100 sein STRING *100 geht ebenso, hauptsache 'feste Länge'.
Oder du speicherst so:
Code: | Type komplex
t1 As String
t2 As String
i1 As Integer
i2 As Integer
b1 As UByte
b2 As UByte
End Type
Dim k1 As komplex
k1.t1 = "ABCDEFGHIJK"
k1.t2 = "XYZ"
k1.i1 = 123456
k1.i2 = 765432
k1.b1 = 128
k1.b2 = 123
Dim f As Integer = FreeFile
Open "t1.dat" For Binary As #f
Print #f, k1.t1
Print #f, k1.t2
Put #f,, k1.i1
Put #f,, k1.i2
Put #f,, k1.b1
Put #f,, k1.b2
Close #f
Dim k2 As komplex
f = FreeFile
Open "t1.dat" For Binary As #f
Input #f, k2.t1
Input #f, k2.t2
Get #f,, k2.i1
Get #f,, k2.i2
Get #f,, k2.b1
Get #f,, k2.b2
Close #f
Print k2.t1
Print k2.t2
Print k2.i1
Print k2.i2
Print k2.b1
Print k2.b2
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 18.11.2007, 20:33 Titel: |
|
|
feste länge ist doof....
Aber gut.. ist halt ne einschränkung .. aber wie lang können schon so strings werden.. öhm.. keine ahnung... |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2007, 21:07 Titel: |
|
|
Solang bis du das FreeBASIC-Entwicklerteam überzeugt hast, die nächste Compiler-Version auf deine ganz persönlichen Bedürfnisse und Interessen zuzuschneiden, wirst du damit leben müssen, was FB dir von Haus aus bietet..
@Strings:
Jedes Zeichen im String belegt ein Byte im Speicher..
..ich hab aber auch gerade keine Lust in der Ref nachzusehen, AFAICR 2GB..
Wieviel Strings mit dieser Länge du anlegen kannst überlasse ich dir(und deinem Geldbeutel)
(vergiß bitte nicht das abschließende 0-Zeichen)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 19.11.2007, 15:31 Titel: |
|
|
In wessen interesse sollte es denn nicht sein, variable Strings abspeichern zu können? Geht doch nichtmal nur um meine bedürfnisse..
Würd mich ja gern mal mitnem entwickler unterhalten.. aber die sprechen alle nur englisch :-/ ... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 19.11.2007, 16:37 Titel: |
|
|
Der Nachteil an den variablen Stringlängen ist, dass du dann nicht mehr weißt, wie lang dein UDT ist. Bei fester Länge kannst du auch direkt zum (beispielsweise) zwölften Eintrag springen, weil du leicht berechnen kannst, wo der ist. Bei variabler Stringlänge musst du, um das zwölfte UDT auszulesen, auch alle elf davor auslesen.
Im Übrigen funktioniert das Speichern von Strings variabler Länge doch - nur eben nicht mit dem ganzen UDT am Stück. Voltas Lösung halte ich für keinen all zu großen Mehraufwand. Kannst es ja in eine Speicher-/Lesefunktion packen, die dann das gelesene UDT zurückgibt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 19.11.2007, 16:55 Titel: |
|
|
Ist mjs noch FB-Entwickler?
Der ist auf jeden Fall deutschsprachig.
Inwiefern marzec noch mit FB zutun hat, weiß ich nicht.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
|