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:

Strings einladen

 
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
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 13.11.2005, 16:15    Titel: Strings einladen Antworten mit Zitat

Hi,

wenn ich aus einer größeren Datei, einer Bitmap beispielsweise, einen String in mein Programm einladen möchte, endet der bei mir nach 1024 Byte (ich nehme an, die Stringe können bei der Line-Input-Anweisung maximal 1024 Byte aufnehmen). Ein Bild, das ich mir über die Open-Anweisung in mein kleines Programm einladen möchte, wird, wenn es größer als 1 KByte ist, demnach nur unvollständig geladen, weil dann der String zu Ende ist (es werden also nur die ersten 1024 Pixel des Bildes geladen).

Welche Möglichkeiten gibt es, dieses Problem zu lösen? Ich hätte gedacht, dass die Strings wenigstens 32.768 Byte (32 KB) aufnehmen können, was ja bereits einem Bild mit rund 180x180 Pixeln entspräche, nur 1 KB-Bitmaps sind für meine Vorhaben viel zu klein.

Ich hab schon überlegt, mehrere Line-Input-Anweisungen in die Open-For-Input-As-Anweisung hineinzuschreiben und diese eingeladenen Strings dann einfach zu verknüpfen, was jedoch Quatsch ist, weil die Bitmap aus nur einem einzigen String besteht und damit also nichts geändert werden würde.

Jemand 'ne Idee? mit dem Kopf durch die Mauer wollen

Thanks im Voraus.
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 13.11.2005, 17:04    Titel: Antworten mit Zitat

hi,
Strings können bis 2000k lang sein!
Deine Methode mit Line-Input die Pixel eines Bildes einzulesen ist nicht günstig dafür. Sobald ein CR LF als Bitmuster in dem Bild auftaucht bricht sie ab, da ja die ganze Textzeile gelesen wurde!
Gruß
Volta
_________________
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
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 13.11.2005, 17:17    Titel: Antworten mit Zitat

Ja, ganz sicher ist es im Allgemeinen so, aber leider nicht in meinem Fall. Ich habe von den Bitmaps bereits nur die verwendbaren Bytes aussortiert und die müssen allesamt gelesen werden können.
Ich habs jetzt noch mal in QBasic gesehen, und siehe da: Das Bild wird bis zum letzten Byte geladen. Haargenau dasselbe Programm, nur in QBasic kompiliert, lädt die Datei bis zum letzten Pixel, wo's in Freebasic bei 1024 aufhört. Auch andere Dateien werden in QBasic geladen, aber unter dem selben Programm, das in FreeBasic kompiliert wurde: Ende nach dem 1024. Byte (= 5 + 3/25 Zeilen eines Bildes mit 200 Pixel Breite).

Damit bin ich aber auch nicht weiter, schließlich brauche ich das Programm für FreeBasic und nicht für QBasic. Auch an den Unterschieden zwischen Ansi-Code und ASCII-Code kann es leider nicht liegen: Byte 1023, Byte 1024, Byte 1025... das sind alles dieselben Bytes, es gibt keinen Grund, bei 1024 plötzlich mit der Bearbeitung aufzuhören.


Ich habe irgendwie langsam den Eindruck, FreeBasic hat hier einfach einen riesigen Rückschritt gemacht, wo es doch sonst so viele Vorteile gegenüber QBasic hat.


M. f. G.
Leader4.
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 13.11.2005, 17:21    Titel: Antworten mit Zitat

Hallo,

du kannst doch aus einem BMP nicht einfach alle Zeichen mit ASC(...)<32 rausfiltern! durchgeknallt Dann klappt das sicherlich nicht. Für Bitmaps und alles Andere, was nicht nur reinen Klartext enthält, solltest du tunlichst BINARY als Zugriffsmodus nehmen. INPUT und LINE INPUT sind für Textzeilen gedacht. lächeln
FreeBASIC ist kein Rückschritt, sondern Bitmaps via INPUT/LINE INPUT zu öffnen ist einfach eine Schnapsidee! peinlich

BTW: Du solltest die aktuellste Version von FreeBasic verwenden, da alte Versionen das Problem hatten, Nullbytes nicht als Strings speichern zu können.

Hier ein funktionierender Bitmaploader für FB: http://fb.exp-soft.de/fbnp/?view=50 Damit kannst du auch in Strings abgelegte BMPs anzeigen lassen, wenn du den Source ein kleines bisschen umbaust.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 13.11.2005, 18:00    Titel: Antworten mit Zitat

hi,
ich hoffe das Basicprogramm würde so auch in QBasic funktionieren
(ich kann es nicht unter QBasic ausprobieren, hab ich nicht).
Code:
Open "c:\freebasic\fbc.exe" For Input As #1
do
 Line Input #1,a$
 Print Len(a$);" ";
Loop Until EOF(1)
Close #1
sleep

Zitat:
....wo's in Freebasic bei 1024 aufhört.

In freeBASIC ist hier in vielen Fällen a$ 2000 bis 5000 Byte lang.
Probier das mal selbst aus!
Gruß
Volta
_________________
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
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 13.11.2005, 18:11    Titel: Antworten mit Zitat

Zitat:
(ich kann es nicht unter QBasic ausprobieren, hab ich nicht).

http://www.antonis.de/qbdown/qbcompil.htm lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 13.11.2005, 18:18    Titel: Antworten mit Zitat

Die Datei besteht aus maximal verschiedenen 256 Byte, weil es eine 256-Farben-Bitmap ist. In QBasic wird auch genau das getan, was zu erwarten ist: Die Grafik wird geladen. Das ist das einzig logische, wenn man den Programmcode betrachtet. Und zwar mit nichts weiter als mit Line Input. Für so was brauch ich keine Binary, das sind ganz normale Bytes: ÿ steht für ein weißes Pixel, ü steht für ein blaues Pixel und mehr Farben hat dieses zu ladene Bild nicht. Das ganze Bild besteht aus 20.000 ÿ-Bytes und ü-Bytes, lückenlos. Was soll da nicht gehen? Wenn er ein Byte lädt, muss er doch auch das andere laden, wenn alle identisch sind.

Ich zeig euch mal den Programmcode. Im Anschluss folgt die Datei, die geladen werden soll. Diese steht im isi-Format (von mir selbst gewählt), in der sich nur noch die Farbinformationen der Pixel befinden... der Rest ist für das Programm nicht relevant.


SCREEN 7 'Grafikmodus
OPEN "IMG1.isi" FOR INPUT AS #2 'isi ist das Bild, das ursprünglich
Mal bmp war.

LINE INPUT #2, A$ 'A$: Horizontale Bildlänge In Pxl
LINE INPUT #2, B$ 'B$: Vertikale Bildlänge in Pxl
LINE INPUT #2, C$ 'C$: X-Startbildpunkt (1)
LINE INPUT #2, D$ 'D$ Y-Startbildpunkt (1)
LINE INPUT #2, E$
CLOSE #2


'E$ ist der Großstring mit den Bildinformationen. Jedes Byte steht
'logischerweise für ein Pixel. Die richtige Anordnung der Bytes auf dem
'Bildschirm sowie die richtige Umwandlung der Bytes in die jeweilige
'Farbe führt zum Laden des Bildes.


Z = 1 'Ein einfacher Zähler
Y = VAL(B$) + VAL(D$) 'Der Y-Startpunkt des Bildladens auf dem
'Bildschirm (Bsp.: Y=20: Bildet das
'Bild bei Y=20 auf dem Bildschirm ab)
'Hinweis: Bmps werden von unten nach
'oben geladen, daher ist Y am Anfang
'größer als am Ende.


X = VAL(C$) 'Der X-Startpunkt beim Bildladen (sollte
'im Normalfall 1 sein).







10
M = 1 'Wiederhole solange, bis Bildzeilenumbruch stattfinden muss
DO UNTIL M = VAL(A$)
B$ = MID$(E$, Z, 1) 'Byte-für-Byte-Einlesen der Datei
IF B$ = "ÿ" THEN COLOR 15: PSET (X, Y)
IF B$ = "ú" THEN COLOR 10: PSET (X, Y)
IF B$ = "û" THEN COLOR 14: PSET (X, Y)
IF B$ = "ù" THEN COLOR 12: PSET (X, Y)
IF B$ = "ý" THEN COLOR 13: PSET (X, Y)
IF B$ = "ü" THEN COLOR 9: PSET (X, Y)
IF B$ = "þ" THEN COLOR 11: PSET (X, Y)
IF B$ = " " THEN COLOR 0: PSET (X, Y)
IF B$ = "¤" THEN COLOR 8: PSET (X, Y)

'Hier wurden nun die Bytes in die jeweiligen Pixelfarben umgewandelt
und auf dem Bildschirm angezeigt. Somit wird das Bild geladen - bei
Dateien < 1 KB vollständig, bei Dateien > 1 KB unvollständig.



M = M + 1 'Geht ein Byte weiter
X = X + 1 'Addiert ein Pixel weiter
Z = Z + 1 'Zähler wird um 1 erhöht --> nächstes Byte lesen
LOOP
Z = Z + 1
Y = Y - 1 'Startet die nächste Bildzeile
X = VAL(C$)
B$ = "xxxxxxxxx"
IF Y <= VAL(D$) THEN GOTO 20 'Ist das letzte Byte eingeladen,
GOTO 10 'beende



20
SLEEP





Hier jetzt noch eine relativ kleine Datei zum einladen (Bild.isi):


12 'A$
12 'B$
1 'C$
1 'D$
úúúúúúúúúúúúúúúúúúûûúúúúúúúùùúúûûúúúúúúúùùúûûúúúúúúúúùûúúúúúúúúúúûùúúúúúúúúúûþþùúúúúúúúþûþþùùùúúúúúþûþþþúúúúúúúúûþþþúúúúúúúúúþþúúúúúúúúúúúúúúúúú

'ú = grünes Pixel
'û = gelbes Pixel
'ù = rotes Pixel
'þ = türkises Pixel


Ich hoffe, dass damit meine Gedanken vielleicht besser nachvollzogen werden können.
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 13.11.2005, 18:30    Titel: Antworten mit Zitat

Nun, früher habe ich selbst auch so seltsame Dateiformatsgeschichten gemacht, um ein bisschen Erfahrungen mit sowas zu sammeln, aber wenn man schon dazu fähig ist oder es vom Compiler angeboten bekommt, ein normales Dateiformat zu benutzen, dann sollte man das doch auch bitte tun... durchgeknallt In FB kann man beliebige BMPs mit ein paar Zeilen oder wenn man : benutzt auch mit einer einzigen laden, ohne dass man sich mit dem Dateiformat auseinandersetzen muss.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 13.11.2005, 18:33    Titel: Antworten mit Zitat

Hab das Problem erkannt.

Die Strings nehmen tatsächlich nur maximal 1024 Byte auf. Hab einfach mal ne txt-Datei mit 2000 Buchstaben erstellt und sie einladen lassen: Da fehlte die Hälfte der Buchstaben (genauer: 974 Zeichen). Ich versuch ne neue FB-Version zu kriegen, dann wird das Programm funktionieren.

Danke für eure Beiträge. zwinkern
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 13.11.2005, 23:36    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
In FB kann man beliebige BMPs mit ein paar Zeilen oder wenn man : benutzt auch mit einer einzigen laden,
ohne dass man sich mit dem Dateiformat auseinandersetzen muss.

hey, ich gaube der Spruch von Leader4
Zitat:
Ein richtiger Programmierer muss so richtig faul sein
und sich den ganzen Tag mit der Frage beschäftigen,
wie man mal wieder etwas einfacher machen kann.

passt eher zu dir Sebastian grinsen
_________________
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
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 14.11.2005, 15:29    Titel: Antworten mit Zitat

Leader4 hat Folgendes geschrieben:
Hab das Problem erkannt.

Die Strings nehmen tatsächlich nur maximal 1024 Byte auf. Hab einfach mal ne txt-Datei mit 2000 Buchstaben erstellt und sie einladen lassen: Da fehlte die Hälfte der Buchstaben (genauer: 974 Zeichen). Ich versuch ne neue FB-Version zu kriegen, dann wird das Programm funktionieren.

Danke für eure Beiträge. zwinkern


Hast du die neue Version??

Bei mir klappt alles. Habe zuerst eine Datei mit 2048 Zeichen gemacht und dann nacher eingelesen. Alle Zeichen sind da.

Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 14.11.2005, 18:26    Titel: Antworten mit Zitat

Es ging auch ohne neue Version.

Ich hab einfach 50 Line-Input-Anweisungen in eine Routine eingebracht und er hat dann an der Stelle den String neu eingeladen, wo er sonst immer abgebrochen hat (bei 1024 Byte). Ist der größte Blödsinn und völlig unlogisch, in QB hätte es bei so was 100 Fehlermeldungen angezeigt, aber solange es funktioniert, ist das nicht mein Problem.


Grüßle.

Leader4.
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.11.2005, 21:04    Titel: Antworten mit Zitat

..ist ja hier eigentlich erledigt, aber...

hier ist ein Beitrag aus dem engl. Forum:
http://www.freebasic.net/forum/viewtopic.php?p=13734#13734

da wird ein 100MB String in FB gebastelt und gespeichert!
_________________
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
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 15.11.2005, 23:19    Titel: Antworten mit Zitat

In der readme datei steht, dass strings ne länge bis 2gb haben können durchgeknallt

Wer braucht so einen langen string??
Da reicht bei vielen doch der arbeitsspeicher nicht mehr.

Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.11.2005, 23:41    Titel: Antworten mit Zitat

LINE INPUT hat bei binären Dateien überhaupt nichts zu suchen, sondern da sollte man schon eher auf INPUT$() zurückgreifen. Mache ich in der Regel in QB; ich nehme mal an, dass diese Funktion auch in FreeBASIC mit derselben Semantik portiert wurde.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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