Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 31.01.2009, 12:32 Titel: |
|
|
Ist nichts Referenz-spezifisches:
Ich fände eine kleine JS-Funktion + Button ganz praktisch, die den gesamten Sourcecode bei fbPorticula markiert. |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 31.01.2009, 15:55 Titel: |
|
|
Genau daran hatte ich dabei gedacht
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? |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.01.2009, 20:43 Titel: |
|
|
Unsere Admins sind ja allgemein als nicht sehr experimentiertfreudig bekannt... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 01.02.2009, 13:38 Titel: |
|
|
Administrator und experimentierfreudig sollten sich per Definition schon gegenseitig ausschließen. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 24.08.2010, 04:14 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4599 Wohnort: ~/
|
Verfasst am: 24.08.2010, 11:26 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 24.08.2010, 11:48 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4599 Wohnort: ~/
|
Verfasst am: 24.08.2010, 11:55 Titel: |
|
|
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, 12:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 24.08.2010, 12:11 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4599 Wohnort: ~/
|
Verfasst am: 24.08.2010, 12:16 Titel: |
|
|
Ach so, ich bin beim Eintrag für '$DYNAMIC ...
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 |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 563 Wohnort: Jüterbog
|
Verfasst am: 26.01.2012, 22:27 Titel: Referenz GET(Datei) |
|
|
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. |
Mutton |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 26.01.2012, 22:54 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.01.2012, 00:12 Titel: |
|
|
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 |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 27.01.2012, 00:17 Titel: |
|
|
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 |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.01.2012, 15:58 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4599 Wohnort: ~/
|
Verfasst am: 27.01.2012, 17:16 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.01.2012, 17:49 Titel: |
|
|
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 |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 27.01.2012, 22:12 Titel: |
|
|
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 |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.01.2012, 22:36 Titel: |
|
|
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 |
|
|
|