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:

FB-Referenz - Bug-Report
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
 
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
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 31.01.2009, 11:32    Titel: Antworten mit Zitat

Ist nichts Referenz-spezifisches:
Ich fände eine kleine JS-Funktion + Button ganz praktisch, die den gesamten Sourcecode bei fbPorticula markiert. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 31.01.2009, 12:32    Titel: Antworten mit Zitat

...Sourcecode dazu gibt's übrigens hier grinsen
http://freebasic.net/forum/templates/select_expand_bbcodes.js
_________________
» 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
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 31.01.2009, 14:55    Titel: Antworten mit Zitat

Genau daran hatte ich dabei gedacht grinsen
So eine Erweiterung wie beim FB Forum wäre auch cool, mit Expand, Select und farbigem Highlighting. Wie wärs wenn die Admins sich da mal zusammentun und bei denen anklopfen? lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 31.01.2009, 19:43    Titel: Antworten mit Zitat

Unsere Admins sind ja allgemein als nicht sehr experimentiertfreudig bekannt... grinsen
_________________
» 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
Mao



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

BeitragVerfasst am: 01.02.2009, 12:38    Titel: Antworten mit Zitat

Administrator und experimentierfreudig sollten sich per Definition schon gegenseitig ausschließen.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 24.08.2010, 03:14    Titel: Antworten mit Zitat

Hallo,

Code:
'$DYNAMIC
DIM x(3) AS INTEGER
PRINT UBOUND(x)

REDIM x(6)
PRINT UBOUND(x)


Gibt bei mir so Fehler aus!
Code:
redim.bas(4) error 4: Duplicated definition, x in 'REDIM x(6)'


So funktioniert es.

Code:
'$DYNAMIC
REDIM x(3) AS INTEGER
PRINT UBOUND(x)

REDIM x(6)
PRINT UBOUND(x)


mfg andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.08.2010, 10:26    Titel: Antworten mit Zitat

Wenn du beide male REDIM verwendest, dann brauchst du auch kein '$DYNAMIC. Seit fbc v0.17 geht das (bei normaler Compilierung) sowieso nur noch mit REDIM:

Referenz hat Folgendes geschrieben:
'$DYNAMIC kann nur bis FreeBASIC v0.16 eingesetzt werden, oder in entsprechend höheren Versionen, die mit der Kommandozeilenoption -lang deprecated kompiliert wurden! Wird mit FreeBASIC v0.17 unter der Option -lang fb kompiliert, so ist '$DYNAMIC nicht mehr zulässig!


Der Compiler meckert aber über das '$DYNAMIC nicht, weil es als Kommentar behandelt wird.
_________________
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
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 24.08.2010, 10:48    Titel: Antworten mit Zitat

Hi,
ich glaube isiprimax will auf die Fehlermeldung der Dimensionierung hinweisen.
In der Referenz steht das Beispiel so wie er es oben angegeben hat und produziert die Fehlermeldung.

Code:
Dim x() As Integer

ReDim x(3)
Print UBound(x)

ReDim x(6)
Print UBound(x)
Sleep
So ist es evtl verständlicher?
_________________
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
nemored



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

BeitragVerfasst am: 24.08.2010, 10:55    Titel: Antworten mit Zitat

Hmm ... wenn ich das Programm (wie in der Referenz angegeben) mit -lang deprecated compiliere, erhalte ich keine Fehlermeldung. Oder verstehe ich jetzt was falsch?

edit: Um das Problem noch einmal klarer zu stellen: Der 'Fehler' liegt weniger an DIM/REDIM als an der Tatsache, dass '$DYNAMIC nicht mehr erlaubt ist (aber selbst keinen Fehler produziert, weil es ja als Kommentar behandelt wird). So geschrieben wird der Fehler offensichtlicher:
Code:
OPTION DYNAMIC
DIM x(3) AS INTEGER
PRINT UBOUND(x)

REDIM x(6)
PRINT UBOUND(x)

Bewirkt genau dasselbe; hier wird aber das nicht mehr erlaubte DYNAMIC rechtzeitig abgefangen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.


Zuletzt bearbeitet von nemored am 24.08.2010, 11:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 24.08.2010, 11:11    Titel: Antworten mit Zitat

Hmm..
ich dachte das Beispiel unter REDIM soll allgemein gültig sein und nicht nur unter -lang deprecated lauffähig?
_________________
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
nemored



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

BeitragVerfasst am: 24.08.2010, 11:16    Titel: Antworten mit Zitat

Ach so, ich bin beim Eintrag für '$DYNAMIC ... verlegen

Ja, für den Eintrag von REDIM stimme ich zu. Da steht zwar auch drüber, dass es nicht mehr erlaubt ist, aber da macht es auf jeden Fall mehr Sinn, nur aktuellen Beispielcode reinzustellen.
(Bin gar nicht auf die Idee gekommen, dass unter REDIM noch ein $'DYNAMIC-Code stehen könnte.)
_________________
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
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 26.01.2012, 21:27    Titel: Referenz GET(Datei) Antworten mit Zitat

Fehler in Referenz GET(Datei)?

ich versuche grad aus einer im BINARY-Modus geöffneten Datei
die ersten 12 Bytes auszulesen:

Code:
type ChunkDescriptor
  chunkID as string*4
  chunksize as integer
  rifftype as string*4
end type
.
.
.
dim riffhead as ChunkDescriptor
.
.
.
get # wav,,riffhead   'sollten 12 Bytes sein <---- 20 BYTES!!!!!!!!!!!!!!!

sizeof() liefert für dieses UDT 20 bytes
und seek() liefert 21

in der Referenz zu GET ist ein solches Beispiel aber direkt
beschrieben:

Zitat:
Um ganze Arrays oder UDTs zu lesen, geben Sie einfach nur den Bezeichner ohne Index bzw. Verweis auf einen Record an.

Beispiel 2:


Type UDT
a As Integer
b As Double
c As String * 5
End Type

Dim inpArray(5) As Integer
Dim inpUDT As UDT

Dim As Integer f = Freefile
Open "file.ext" For Binary As #f

Get #f, , inpArray()
Get #f, , inpUDT

Close #f

In inpArray werden 6 * 4 = 20 Bytes eingelesen; 6 ist die Anzahl der Indizes (von 0 bis 5), 4 ist die Länge einer Integer-Variable. In inpUDT werden 4 + 8 + 5 = 17 Bytes eingelesen. Es ist die Summe der Längen der Records des UDTs.


traurig

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 26.01.2012, 21:54    Titel: Antworten mit Zitat

Das liegt nicht an Get, sondern am Padding des Types. Mit einem 'FIELD = 1' erhält man schon mal bei SizeOf die richtige Größe, nämlich 14 Bytes. Die zwei Extrabytes kommen natürlich von den Strings, die nullterminiert sind und somit ein Zeichen mehr im Speicher benötigten. Wenn du ZStrings nimmst, dann erhältst du zwar 12 Bytes, aber dann kriegst du ein Problem mit der Nullterminierung.

Beim Beispiel der Referenz bin ich mir nicht sicher (hab es jetzt auch nicht getestet), eventuell überprüft GET ja auch, was das für ein Datentyp ist und macht es trotz falschem SizeOf richtig (was ich aber nicht glaube).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 26.01.2012, 23:12    Titel: Antworten mit Zitat

MOD hat Folgendes geschrieben:
Die zwei Extrabytes kommen natürlich von den Strings

"natürlich"? Zumindest in QB war ein auf die Platte geschriebener oder davon gelesener String im Binärmodus genau so lange wie angegeben - also bei * 4 eben vier Zeichen.
_________________
» 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
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 26.01.2012, 23:17    Titel: Antworten mit Zitat

Es sind auch 4 Bytes, nur brauchen fixed length Strings eine Nullterminierung. Steht auch irgendwo als Unterschied zu QB. Aber du hast Recht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.01.2012, 14:58    Titel: Antworten mit Zitat

MOD hat Folgendes geschrieben:
Es sind auch 4 Bytes, nur brauchen fixed length Strings eine Nullterminierung. Steht auch irgendwo als Unterschied zu QB. Aber du hast Recht.
Der Witz bei fixed length ist, dass du keine brauchst. Weil die Länge bekannt ist. Irgendwo im Petzold stand sogar mal was explizit über RIFF, fällt mir da gerade ein...

/e: Japp, Petzold S. 1282 (circa): Die RIFF-ID ist ein 4 Bytes langer ASCII-String. Ohne irgendwas.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 27.01.2012, 16:16    Titel: Antworten mit Zitat

Jedenfalls gibt
Code:
type t
  as string*4 text
end type

dim a as t, b as string*4

print sizeof(a), sizeof(b)

bei mir beide Male 5 aus.

edit: MOD bezieht sich sicherlich auf http://www.freebasic-portal.de/befehlsreferenz/string-zeichenkette-datentyp-412.html:
Referenz hat Folgendes geschrieben:
In FreeBASIC wird einem String intern ein CHR(0) angehängt.

Var-Length-Strings bräuchten das ja auch nicht.
_________________
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
Jojo
alter Rang


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

BeitragVerfasst am: 27.01.2012, 16:49    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Irgendwo im Petzold stand sogar mal (...)

Das hat aber recht wenig damit zu tun, wie FB das intern verwaltet. Ich würde an der Stelle wohl einfach nicht mit Strings hantieren sondern mit 32-Bit-Integers, aber kA, Binärformate mit BASIC zu bearbeiten ist irgendwie immer pain.
_________________
» 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
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 27.01.2012, 21:12    Titel: Antworten mit Zitat

ausserdem will man nicht types GETen, genausowenig wie man structs in C read() en will. stichwort big/little endian und ebn padding

lies das lieber von hand mit input(datei,len)
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.01.2012, 21:36    Titel: Antworten mit Zitat

Flo hat Folgendes geschrieben:
wie man structs in C read() en will.
Ach, äh,.... wie machst du das denn? Weiterhin ist ein Dateiformat das BE/LE nicht explizit festlegt ziemlich... grenzwertig.
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
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
Seite 3 von 6

 
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