Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 02.01.2009, 13:07 Titel: Strings |
|
|
Hi
Dies ist so ziemlich mein erstes FB-Programm und dabei bin ich schon bei einem größeren Problem:
Warum hat ein mit
Code: | type ID3v1
ID as string * 3
Titel as string * 30
Interpret as string * 30
Album as string * 30
Jahr as string * 4
Kommentar as string * 30
Genre as string * 1
end type |
definierter Datentyp die Größe von 135 Bytes? Werden da etwa die NULL-Bytes (die man sich eigentlich sparen könnte) hintenan mitgezählt ?
Wenn ich das ganze mit ZStrings mache stimmt zwar die Bytelänge (128), aber mit diesen ZStrings kann ich keine chr(0) Zeichen speichern.
Wie man sicher aus dem Type-Namen sieht, will ich ID3v1 und ID3v1.1 Tags aus MP3 Dateien auslesen. Und mit "GET #DateiN, Laenge-127, ID3v1Tag" stört die zu große Bytelänge.
Wie kann man das umgehen? _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.01.2009, 14:49 Titel: |
|
|
pass auf, da gab's im englischen forum letztens erst probleme mit. ein Type hat immer auch ein padding, und das ist auf verschiedenen platformen unterschiedlich groß. ich würde die elemente einzeln GETten, dann kann auch mit null-bytes und padding nix passieren. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.01.2009, 17:38 Titel: |
|
|
Mit ZStrings sollte das gehen: Code: | Type ID3v1 Field = 1 '<-wichtig
ID(1 To 3) As UByte
Titel As ZString * 30
Interpret As ZString * 30
Album As ZString * 30
Jahr As ZString * 4
Kommentar As ZString * 28
V1_1 As UByte
Titelnr As UByte
Genre As UByte
End Type
Dim ID3v1Tag As ID3v1
Dim As Integer y,ff = FreeFile
Open "Sandy Nelson.mp3" For Binary As #ff
Get #ff, Lof(ff)-127, ID3v1Tag
Close #ff
With ID3v1Tag
? Chr(.ID(1),.ID(2),.ID(3))
? .Titel
? .Interpret
? .Album
? .Jahr
? .Kommentar
? .Genre
.titel = String(30,0) 'überschreibt den String mit 30x chr(0)
.Titel ="ich und ich" 'neuer Titel
End With
ff = FreeFile
Open "Sandy Nelson.xxx" For Binary As #ff
Put #ff,Lof(ff)-127,ID3v1Tag
Close #ff
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 02.01.2009, 19:01 Titel: |
|
|
Danke für eure Hilfe. Derzeit habe ich (auf die vorhin schon funktionierende) Lösung mit einzelnen GETs zurückgegriffen.
@volta: Danke für den Programmcode. Da ich mich bis jetzt noch nicht wirklich mit FreeBasic beschäftigt habe, sondern nur mit QuickBasic, Assembler und etwas C++ [..], verstehe ich den Programmcode noch nicht ganz (z.B. kenne ich das "WITH" noch gar nicht), aber die FB-Hilfe wird mich da aufklären, sobald ich mir etwas Zeit nehme zum Lesen...
Inzwischen habe ich das Programm übrigens um die Funktion Lyrics3 Tags zu lesen erweitert. Nun sind noch ID3v2 und die von WMA und OGG Dateien ausständig...Weiters ist eine einfache Oberfläche und Abspielfunktion geplant. Weiteres dazu vielleicht in nächster Zeit in den Projektvorstellungen  _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.01.2009, 20:59 Titel: |
|
|
WITH spart einfach nur arbeit.
statt
Code: |
ganzLangerTypeName.element1 = 1
ganzLangerTypeName.element2 = 2
ganzLangerTypeName.element3 = 3
ganzLangerTypeName.element4 = 4
ganzLangerTypeName.element5 = 5
ganzLangerTypeName.element6 = 6
ganzLangerTypeName.element7 = 7
|
schreibt man einfach
Code: |
with ganzLangerTypeName
.element1 = 1
.element2 = 2
.element3 = 3
.element4 = 4
.element5 = 5
.element6 = 6
.element7 = 7
end with
|
aber das steht ja auch alles in der ref... _________________ » 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: 03.01.2009, 00:10 Titel: |
|
|
[OT]
Manchmal wünscht' ich mir WIDTH in C#... kennt nicht jemand ein Pendant dazu? _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2009, 00:19 Titel: |
|
|
WITH gibt's nicht in C#?! Das ist ja mal Mega-LOL Das gibt's doch echt überall... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 03.01.2009, 19:26 Titel: |
|
|
Ich finde es einfach so geil:
Vier andere Programmierer in meinem Jahrgang schwören auf C#.... tja... ich finde es so geil. Einer hat mal sein NB mitgenommen um mir zu zeigen wie toll er programmieren kann... xD.... was macht er als erstes?
Startet firefox und öffnet unzählige Referenzen und Tutorials :DDDD |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 03.01.2009, 19:31 Titel: |
|
|
Besser als IE . _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2009, 19:42 Titel: |
|
|
28398: das hat jetzt aber weniger was mit der sprache zu tun. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 03.01.2009, 22:38 Titel: |
|
|
@Jojo:
Tut mir leid dich zu enttäuschen, wirklich brauchen tut man's nicht... Visual Studio macht das ganze locker wieder wett durch die automatische Vervollständigung. Wäre nur ein NiceToHave. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2009, 23:15 Titel: |
|
|
FBEdit vervollständigt auch, und in VB6 wird auch vervollständigt. und doch ist WITH einfach viel leserlicher. sehr. viel. leserlicher. _________________ » 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: 04.01.2009, 00:40 Titel: |
|
|
Warum? Du hast den Bezeichner einige Male mehr dastehen - das schadet der Übersicht meiner Meinung nach überhaupt nicht. Du weißt - ohne nach der WITH-Anweisung schauen zu müssen - was du gerade bearbeitest. Nur für kurz hingehackte Programme wäre es eine nette Alternative. Aber mal wieder Ansichtssachen.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.01.2009, 01:23 Titel: |
|
|
und für mich ist es einfach redundanter code, der schlecht zu pflegen ist und hässlich aussieht.
aber ja, ist wohl ansichtssache. _________________ » 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: 04.01.2009, 13:12 Titel: |
|
|
Naja, das schlecht zu pflegen kann man ja dann doch nicht so stehen lassen. Änderst du den Variablennamen in VisualStudio bietet es dir gleichzeitig an, diesen im Code des jeweils gültigen Blocks gleich mit umzubenennen. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
|