Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Type mit bsave abspeichern?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 17.11.2007, 11:44    Titel: Type mit bsave abspeichern? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 17.11.2007, 12:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 17.11.2007, 13:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.11.2007, 13:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 17.11.2007, 14:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 17.11.2007, 18:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 18.11.2007, 11:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.11.2007, 15:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 18.11.2007, 20:33    Titel: Antworten mit Zitat

feste länge ist doof.... traurig
Aber gut.. ist halt ne einschränkung .. aber wie lang können schon so strings werden.. öhm.. keine ahnung...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2007, 21:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 19.11.2007, 15:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 19.11.2007, 16:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 19.11.2007, 16:55    Titel: Antworten mit Zitat

Ist mjs noch FB-Entwickler?
Der ist auf jeden Fall deutschsprachig.
Inwiefern marzec noch mit FB zutun hat, weiß ich nicht. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz