Dateien auslesen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Mr Hopp

Betreff: Dateien auslesen

BeitragSo, Jun 26, 2005 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich habe ein Programm geplant, in dem man Lieder komponieren kann und diese dann abspeichern und abspielen kann. Nun weiß jeder, der von Notenschrift was versteht, das extrem viele Informationen untergebracht werden, also Notenhöhe, Länge, Lautstärke, Tempo. Und das klingt jetzt zwar wenig, aber so etwas umzusetzen scheint schwieriger zu sein, als ich dachte. Naja, auf jeden Fall dachte ich, man könnte alle Informationen in einer txt-Datei unterbringen, aber da müsste man in jede Zeile eine Information schreiben und diese dann mit ReadLine abrufen, da bin ich mir aber nicht sicher, wie sich so viele Zeilen auf den Speicherplatz auswirken. Außerdem kommt hinzu, das die Lieder mehrstimmig sein sollen. Soll ich doch lieber für jede Infogruppe (Notenhöhe, Länge, Lautstärke, Tempo) eine eigene txt-Datei anlegen? Kompilizierte Angelegenheit Rolling Eyes Wäre schön, wenn mir jemand weiterhelfen könnte.

Edit: Ach nee, jetz' hab' ich's! Ich nehme pro Stimme eine txt-Datei, in der dann pro Zeile ein Ton mit seinen Infos ausgelesen wird.

Mfg Mr Hopp

Mr.Keks

BeitragSo, Jun 26, 2005 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
das sind gar keine informationen im vergleich zu denen, die bei echten tönen wie wave anfallen... allerdings solltest du lieber etwas optimierter speichern. mit writebyte/short/int, wenns möglich ist.
MrKeks.net

BtbN

BeitragSo, Jun 26, 2005 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dir auch empfhelen, nicht eine ganze Zeile voll zu klatschen!
Schreib einfach mit WriteByte immer was neues Hintendrann.
 

Mr Hopp

BeitragSo, Jun 26, 2005 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich hatte jetzt geplant das das ganze etwa so aussieht

Zitat:
00030
00230
00430
00530
00720


Wie aber kann ich eine einzelne Zahl auslesen? Und wie soll ich das mit Int machen?

Ctuchik

BeitragSo, Jun 26, 2005 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbasic.com/bpdo...ile/Stream

Man beachte die Befehle WriteByte, WriteShort, WriteInt, sowie ReadByte, ReadShort und ReadInt!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Kernle 32DLL

BeitragSo, Jun 26, 2005 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Mr Hopp hat Folgendes geschrieben:
Ja, ich hatte jetzt geplant das das ganze etwa so aussieht

Zitat:
00030
00230
00430
00530
00720


Wie aber kann ich eine einzelne Zahl auslesen? Und wie soll ich das mit Int machen?


An sowas hatte ich auch schonmal gedacht. Zwar nicht im hinblick auf
Noten, aber doch schon was mit Musik. Hatte daran gedacht, das man
so Instrumente hat, und in der textdatei steht wann das Instrument
spielen soll. Also 1 = Ja 0 = Nein.Habe ich nie ausprobiert, aber in der
Theorie müsste es klappen.
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog]
Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89
Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009
 

Mr Hopp

BeitragSo, Jun 26, 2005 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, bei mir sollte die erste Zahl die Oktave sein, die Zweite zusammen mit der dritten die Tonhöhe, die vierte die Länge und die fünfte die Lautstärke

Artemis

BeitragSo, Jun 26, 2005 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun dann guck dir noch mal genau
Byte (http://www.blitzbase.de/tabellen/datentypen.htm)
ql:WriteByte
und ql:ReadByte
an.

Dann kannst du es sogar in drei (oder zwei??) bytes zusammen fassen, da ja keine deiner daten die 128 überschreitet oder??
 

Mr Hopp

BeitragMo, Jun 27, 2005 8:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie jetzt? Blöd bin ich ja nicht (oder vielleicht doch?) das habe ich auch schon ausprobiert, allerdings mit Byte-Lesen aus einer txt.Datei. Also man kann diese Befehle nur für Integer Zahlen benutzen(.dat)? Sollte ich also eine kilometerlange Zahl erstellen, oder etliche kurze? Oder klappt es doch mit .txt?

D2006

Administrator

BeitragMo, Jun 27, 2005 9:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

erstmal ist es völlig egal ob das eine *.txt Datei ist oder ein *.dat. Hat keinen Einfluss auf die Art der Speicherung, diese bestimmst nämlich du mit der Art der Programmierung.

Ich würde dir genauso wie alle andere empfehlen, das ganze per WriteByte/Short zu lösen.

Wenn du also diese 5 Zahlen hast, liest du sie der Reihe nach von links aus (oder schreibst sie halt von links rein). Dabei ist zu beachten, wie groß die Zahlen werden können. Werden sie nie größer als 255 und nie negativ, so kannst du für alle Zahlen Write/Readbyte nehmen. Auch für die 2-stellige Zahl die du hast. Demnach wären es ja dann nur noch 4 Werte.

Was halt eventuell als Nachteil bezeichnet werden kann, ist die Tatsache, dass wenn du per WriteByte zB eine 4 in eine Datei speicherst und diese mit dem Texteditor öffnest, so wirst du keine 4 sehen. Denn das was du siehst sind ASCII Zeichen. Und die Nummer für das ASCII Zeichen "4" ist nicht gleich ne normale 4. Des weiteren entfallen die Zeilenumbrüche, so dass du die Datei nicht mehr mit dem Texteditor lesen bzw. bearbeiten kannst. Deswegen solltest du dir auch gleich einen kleinen eigenen Editor schreiben.

So nun ganz simples Beispiel:
Wir wollen eine Datei reinladen, die schon für einen Ton alle 4 Werte abgespeichert hat. Wir öffnen einfach die Datei mit ql:Readfile. Danach lesen wir mit ql:ReadByte die 4 Informationen aus und speichern sie in geeigneten Variablen. Du musst also 4 mal ReadByte anwenden.

Noch Fragen soweit?

MfG
D2006
 

Mr Hopp

BeitragMo, Jun 27, 2005 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann vielen Dank, ich hab's ausprobiert und jetz' kann's losgehen! Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group