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:

Anfängerprobleme: Drucken und Dateiverwaltung

 
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
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 06.12.2009, 15:30    Titel: Anfängerprobleme: Drucken und Dateiverwaltung Antworten mit Zitat

Hi,
ich mache gerade meine ersten – noch ziemlich wackeligen - Gehversuche in fb. Fragen haben ich im Moment keine (außer solche, wo ich vermutlich aufgefordert werde zunächst mal die Suchfunktion dieses Forums zu benutzen). Ein paar Probleme habe ich mit Freebasic dennoch.

1. Über den Druck auf Papier (mit handelsüblichen Windows-USB-Druckern) findet man praktisch keine Beispielprogramme oder Tutorials. Wie stelle ich Schriftart, Schriftgröße, Zeilenabstand, Seitenränder usw. ein? Wie positioniere ich den Text?


2. So ähnlich sieht es auch mit Dateien aus. Da finde ich nicht allzu viel an Informationen. Im Freebasic-Portal gibt es hierzu ein Tutorial namens „Random-Tutorial“. Erklärt wird der wahlfreie Dateizugriff auf einen Datensatz mittels des Schlüsselworts „Random“. In der Befehlsreferenz zu diesem Schlüsselwort steht jedoch folgendes „Es wird davon abgeraten, den RANDOM-Modus zu verwenden; stattdessen empfiehlt sich der BINARY-Modus oder die sequentiellen Modi“. Für mich klingt das ziemlich verwirrend. Noch verwirrender wird es, wenn ich versuche mittels der Befehlsreferenz den „Binary-Modus“ zu durchblicken. Was mir fehlt, ist ein einfaches Beispiel für eine vollständige Dateiverwaltung. z.B. eine Adressendatei, in der Adressen gesucht, eingefügt, gelöscht oder nach bestimmten Kriterien umsortiert werden.

So, genug gemeckert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 06.12.2009, 17:02    Titel: Antworten mit Zitat

Zitat:

1. Über den Druck auf Papier (mit handelsüblichen Windows-USB-Druckern) findet man praktisch keine Beispielprogramme oder Tutorials. Wie stelle ich Schriftart, Schriftgröße, Zeilenabstand, Seitenränder usw. ein? Wie positioniere ich den Text?

so trivial ist das auch keineswegs, vor allem nicht mit FB. du könntest dich natürlich mit PostScript auseinandersetzen, das kann man sicher irgendwie mit FB benutzen.

Zitat:

2. So ähnlich sieht es auch mit Dateien aus. Da finde ich nicht allzu viel an Informationen. Im Freebasic-Portal gibt es hierzu ein Tutorial namens „Random-Tutorial“. Erklärt wird der wahlfreie Dateizugriff auf einen Datensatz mittels des Schlüsselworts „Random“. In der Befehlsreferenz zu diesem Schlüsselwort steht jedoch folgendes „Es wird davon abgeraten, den RANDOM-Modus zu verwenden; stattdessen empfiehlt sich der BINARY-Modus oder die sequentiellen Modi“. Für mich klingt das ziemlich verwirrend. Noch verwirrender wird es, wenn ich versuche mittels der Befehlsreferenz den „Binary-Modus“ zu durchblicken. Was mir fehlt, ist ein einfaches Beispiel für eine vollständige Dateiverwaltung. z.B. eine Adressendatei, in der Adressen gesucht, eingefügt, gelöscht oder nach bestimmten Kriterien umsortiert werden.

Das hat schon nichts mehr mit Dateiverwaltung, sondern mit Datenbanken zu tun. In Dateien kann so ziemlich alles stehen, aber Datenbanken sind schon ein wenig komplexer.
_________________
» 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
nemored



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

BeitragVerfasst am: 06.12.2009, 17:57    Titel: Antworten mit Zitat

Vielleicht mal ganz kurz zu PUT/GET in Verbindung mit BINARY:
Wenn du eine Datei öffnest, steht der Datenzeiger (normalerweise) an Position 1. Der Datenzeiger gibt an, von welcher Stelle der Datei gelesen bzw. wohin geschrieben wird. Wenn du jetzt mit PUT Daten hineinlegst, wird der Datenzeiger automatisch mitbewegt, und zwar weiß er immer genau, wieviel Platz der geschriebene Datenspeicher braucht.
Code:
DIM a AS INTEGER = 1, b AS BYTE = 2, c AS SHORT = 3
OPEN "test" FOR BINARY AS #1
PUT #1, , a
PUT #1, , b
PUT #1, , c
CLOSE #1

erzeugt eine 7 Byte große Datei: Die ersten vier Byte werden vom Integer a=1 belegt, das fünfte Byte von b=2 und die letzten beiden für das Short c=3.
Beim Auslesen funktioniert das genauso (eben mit GET). Wenn deine Variable ein Integer ist, versucht GET auch ein Integer (vier Byte) auszulesen. Deswegen wird das hier ordnungsgemäß funktionieren:
Code:
DIM a AS INTEGER, b AS BYTE, c AS SHORT
OPEN "test" FOR BINARY AS #1
GET #1, , a
GET #1, , b
GET #1, , c
CLOSE #1

das hier aber nicht:
Code:
DIM a AS BYTE, b AS INTEGER, c AS SHORT
OPEN "test" FOR BINARY AS #1
GET #1, , a
GET #1, , b
GET #1, , c
CLOSE #1

Das heißt, bei c stimmt es wieder, weil vorher die richtige Anzahl an Bytes weitergeschaltet wurde.

Mit Strings kann das nur richtig funktionieren, wenn diese eine feste Länge haben. Aber das Praktische ist, das du dir mit TYPE einen eigenen Dateitypen erstellen kannst (z. B. mit den ganzen Adressdaten) und dann den kompletten Datensatz speichern bzw. wieder auslesen kannst.
Code:
TYPE adresse
  AS STRING*20 name, strasse, wohnort
  AS INTEGER hausnr, plz
END TYPE

DIM eintrag AS adresse
eintrag.name = "Max Muster"
eintrag.strasse = "Karoweg"
eintrag.hausnr = 9
eintrag.wohnort = "Streifenhausen"
eintrag.plz = 12345

OPEN "adressbuch" FOR BINARY AS #1
PUT #1, , eintrag
CLOSE #1


Du merkst vielleicht, dass es ähnlich funktioniert wie bei RANDOM; nur bist du bei BINARY wesentlich flexibler und kannst verschiedene Datentypen beliebig mischen.
_________________
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
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 06.12.2009, 19:09    Titel: Antworten mit Zitat

@ Jojo.
Von Postscript habe ich keine Ahnung. Früher (zu DOS-Zeiten) war das Drucken in Q-Basic relativ einfach. Beispielsweise wurde der Fettdruck mit folgendem Basic-Befehl aktiviert: "LPRINT CHR$(27); CHR$(69)“ und mit " LPRINT CHR$(27); CHR$(70)“ wieder desaktiviert. Für alles, was der Drucker konnte, gab es eine Befehlssequenz, die mit "LPRINT CHR$(27)“ begann. Gibt es so was Einfaches heutzutage nicht mehr?

@nemored.
Danke für deine sehr einleuchtende Erklärung des BINARY-Modus. Ich habe es jetzt verstanden. Doch wo ist der Unterschied zum RANDOM-Modus? Beide Modi machen doch anscheinend das Gleiche. Man kann aus einer Datei mit Datensätzen von gleicher (konstanter) Länge einen beliebigen Datensatz (z. B. Datensatz Nr. 7) ein- oder auslesen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 06.12.2009, 20:15    Titel: Antworten mit Zitat

Nein.
Du kannst aber wunderbar per GDI drucken. Siehe dazu Petzold (gibt es so kein Tut im INet - zumindest keines, welches mir bekannt wäre)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 06.12.2009, 20:25    Titel: Antworten mit Zitat

Escape-Sequenzen funktionieren auf einem modernen Betriebssystem, wo auch gerne mal zwei Anwendungen auf einen Drucker, der kein Zeilendrucker (line printer -> LPRINT) ist, zugreifen können...
Im Vergleich zu dem ganzen GDI/WinAPI-Müll ist PostScript und Konsorten doch aber schon eher verständlich und näher an Escape-Sequenzen dran.
_________________
» 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
nemored



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

BeitragVerfasst am: 06.12.2009, 20:35    Titel: Antworten mit Zitat

Zitat:
Doch wo ist der Unterschied zum RANDOM-Modus? Beide Modi machen doch anscheinend das Gleiche. Man kann aus einer Datei mit Datensätzen von gleicher (konstanter) Länge einen beliebigen Datensatz (z. B. Datensatz Nr. 7) ein- oder auslesen.

Man kann mit BINARY auch Datensätze unterschiedlicher Länge einlesen, mit RANDOM ist man auf die gleiche Länge beschränkt. Das macht BINARY wesentlich flexibler (und natürlich auch komplizierter happy ).
_________________
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
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 07.12.2009, 22:12    Titel: Antworten mit Zitat

So ganz hat sich der Nebel bei mir noch nicht gelichtet. Wenn ich das richtig begreife, ist der RANDOM-Modus anscheinend ein Spezialfall des BINARY-Modus.

Sobald eine Dateistruktur mit ausschließlich gleich langen Datensätzen vorliegt (ein typisches Beispiel wäre eine Adressen-Datei mit den Feldern Nachname, Vorname, Wohnort) kann mittels des RANDOM-Modus anhand der Datensatznummer auf jeden x-beliebigen Datensatz unmittelbar zugegriffen werden.

Mit dem BINARY-Modus ist das anscheinend auch möglich, jedoch umständlicher, da dieser Modus keine Datensätze kennt, sondern nur Byte-Positionen. Anhand der bekannten Länge der Datensätze (z.B. 80 Bytes) und der Position des gesuchten Datensatzes (z.B. Satz Nr. 4) müsste hier zuerst die Position des ersten zu lesenden Bytes (in dem Beispiel-Fall: Byte-Nr 241) ausgerechnet werden. Dieser Aufwand ist im RANDOM-Modus nicht notwendig.

Ich verstehe deshalb absolut nicht, wieso in der Befehlreferenz zum RANDOM-Modus abgeraten wird, diesen zu verwenden. Gibt es hierzu einen plausiblen Grund?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 08.12.2009, 00:49    Titel: Antworten mit Zitat

Keine Ahnung, ob das jetzt ein plausibler Grund ist oder nicht - ich habe in meiner ganzen Programmiererzeit noch nie RANDOM benutzt, weil es mir viel zu unflexibel ist. Der Rechenmehraufwand bei BINARY ist dagegen minimal. lächeln
Wie auch immer, es hindert dich trotz allem niemand, den Modus zu verwenden; es handelt sich nur um eine Empfehlung des Verfassers (der übrigens nicht ich bin, auch wenn mein Name dabei steht happy)
_________________
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: 08.12.2009, 08:22    Titel: Antworten mit Zitat

Ich kann die ganzen RANDOM-Liebhaber auch nicht vestehen... lächeln Ist halt ziemlich unflexibel, vor allem wenn man jetzt eher mit Stream-artigen Formaten statt Datensätzen arbeitet (Also sämtliche Multimedia-Formate).
_________________
» 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
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