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:

String als Dateiname
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 26.09.2015, 17:00    Titel: String als Dateiname Antworten mit Zitat

Guten Abend Gemeinde!

Ich versuche eine Datei unter verschiedenen Namen zu speichern. Eine Zeichenkette im Dateinamen (zB z$) wird aber als Dateiname übernommen statt dessen Inhalt (zB R31234hX).
Geht das gar nicht anders? Oder läßt sich das was machen?


grüsse Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
nemored



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

BeitragVerfasst am: 26.09.2015, 17:09    Titel: Antworten mit Zitat

Code:
version$ = "_1"
OPEN "test" + version$ + ".txt" FOR INPUT AS #1

und ähnliches sollte problemlos funktionieren. Beachte aber die Einschränkungen beim Dateinamen; QBasic unterstützt nur DOS-kompatible Dateinamen.[/code]

Wenn du deinen Queltext-Schnipsel posten würdest, könnte man besser sehen, wo das Problem liegt.
_________________
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
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 26.09.2015, 19:14    Titel: Antworten mit Zitat

Hi nemored!

Danke für Deine prompte Antwort!
Kann ich denn da statt '_1' eine Variable einsetzen? Daruf käme es mir an.

Ich fand noch das

Code:
Print "Dateiname : ";
input name$
name$ = "C:\eigene.pro\"+name$
open name$ FOR RANDOM AS #1


Habe es aber noch nicht probieren können.


Grüsse Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.09.2015, 19:29    Titel: Antworten mit Zitat

version$ ist eine Variable. zwinkern Die belegt nemored im Code nur als Beispiel mit einem String-Literal ("_1"), aber der Wert könnte genauso gut vom Anwender eingetippt werden.
_________________

Der Markt regelt das! | 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
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 20.02.2016, 00:30    Titel: ... muss nochmals afu das Thema zurückkommen ... Antworten mit Zitat

Guten Abend Gemeinde!

Konnte mich erst jetzt so richtig ransetzen. Deshalb erst jetzt zu dem
von mir begonnenen Thema einige Nachfragen.

Zur Erinnerung: Ich habe einen lauffähigen Code. Den will ich oftmals aber mit veränderten Parametern ablaufen lassen. Dabei soll bei jeder Runde eine Datei mit entsprechendem Dateinamen gespeichert werde.

Ich mach' das bisher so:

Nach

Code:
SCREEN 0
CLEAR : CLS :

Füge ich ein:
Code:

routine:
paw# = paw# + 1: IF paw# = 4 THEN END


Das Programm soll also 3 Mal durchlaufen werden.

Den jeweiligen Speichernamen lege ich so fest:

Code:
 ram$ = STR$(paw#): nom$ = "B01 " + ram$


Und speichere dann so:

Code:
OPEN "G:\" + nom$ + ".TXT" FOR OUTPUT AS #1


Ganz zu Ende des Programmespringe ich dann zum zweiten Durchlauf zum Beginn mit goto routine.

Das Teil läuft ohne Beanstandung. Speichert aber gar nichts.

Nehme ich allerdings statt Routine eine For ... Next Schleife. Dann wird zumindest unter dem Namen gespeichert. Nur: Was gespeichert wird ist nicht korrekt. Die meisetn Variablen setze ich unmittelbar vor dem NEXT wieder Null.

Ich versuche Mal ein Beispiel zu posten:
Code:

B011:  76.00000   2.3905293   -5.0377756
B012:  76.00000   3.5857940   -5.0377756
B013:  76.00000   4.7810587   -5.0377756
B014:  76.00000   5.9763234   -5.0377756



So weit so schlecht. Nun einige Fragen:

- Mein Dateispeicherstamm ist B01. Danach will ich ein Leerzeichen kriegs aber nicht hin. geht das überhaupt?
- Eine zB 1.7 im Speichernamen wird angemeckert. Kann also nur Ganzzahlen verwenden. Kann ich dem ausweichen?
- Wenn ich ein kleines Steuerprogramm schreibe und das eigentliche Programm aufrufe. Wäre das nicht machbar und problemloser? da bräuchte ich doch nicht in meinem Programm rumfummeln? Aber wie übergebe ich die zu verändernde variable und den Speichernamen?

Hoffentlich fall ich Euch nicht auf die Nüsse mit meinen Fragen. Bin halt eher eine Chaosprorammira!


grüsse nils



ps.: Wie kann ich denn bei der Nutzung der DOSBOX einen Programmablauf abbrechen?
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 20.02.2016, 08:16    Titel: Antworten mit Zitat

Hallo Nils!

Zitat:
Das Teil läuft ohne Beanstandung. Speichert aber gar nichts.
Hast du vielleicht vergessen, die Datei am Ende zu schliessen (CLOSE #1) ?

Die Verwendung von Variablen für den Dateinamen beim OPEN - Befehl ist problemlos möglich, allerdings mußt du dich dabei -wie nemored schon erwähnte- an die 8+3 - Konventionen ("DOS - Dateinamen") halten. Die Zeichen
Code:
\/?:*<>"|
dürfen in keinem Dateinamen verwendet werden, bei 8+3 kommen noch das Leerzeichen sowie die meisten nationalen Sonderzeichen (äöüß...) dazu, und der Punkt ist nur als Trennzeichen von Dateiname und Dateierweiterung erlaubt. Die gängigste Methode, Leerzeichen und Punkt zu ersetzen, ist der Unterstrich.
Zitat:
- Wenn ich ein kleines Steuerprogramm schreibe und das eigentliche Programm aufrufe. Wäre das nicht machbar und problemloser? da bräuchte ich doch nicht in meinem Programm rumfummeln? Aber wie übergebe ich die zu verändernde variable und den Speichernamen?
Machbar ja, problemloser wohl eher nicht. Um vom Steuerprogramm aus dein eigentliches Programm aufzurufen, gibt es den Befehl CHAIN. Anders als bei freeBASIC (By the way: Hat dir hier schon mal jemand den Umstieg auf FB empfohlen? grinsen ) erhält das aufrufende Programm bei QB die Kontrolle nicht automatisch zurück, sobald das aufgerufene Programm beendet wird, sondern muß vom aufgerufenen Programm seinerseits wieder mit CHAIN aufgerufen werden.

Die Variablen übergibst du von einem Programm an das andere, indem du sie als COMMON deklarierst (in beiden Programmen). Das Rumfummeln in deinem Programm bleibt dir also nicht erspart.
Zitat:
Bin halt eher eine Chaosprorammira!
Naja, wenigstens gibst du's zu grinsen
Zitat:
Wie kann ich denn bei der Nutzung der DOSBOX einen Programmablauf abbrechen?
Tastenkombination Strg + Pause

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 20.02.2016, 13:54    Titel: Antworten mit Zitat

Code:
 ram$ = STR$(paw#): nom$ = "B01 " + ram$


Richtig, da keine Leerzeichen erlaubt sind, wäre:

Code:
 ram$ = LTRIM$(STR$(paw#)): nom$ = "B01 " + ram$
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 20.02.2016, 18:35    Titel: Re: ... muss nochmals afu das Thema zurückkommen ... Antworten mit Zitat

Nils hat Folgendes geschrieben:
Kann ich denn da statt '_1' eine Variable einsetzen? Daruf käme es mir an.

An dieser Stelle wichtig: Den syntaktischer Aufbau einer Programmiersprache verstanden zu haben. In QB: OPEN erwartet den Dateinamen wie bei allen Befehlen auch als Stringausdruck. Und für einen Stringausdruck bist Du absolut frei. Im einfachsten Fall ist dieser einfach ein Stringliteral (=Zeichenkette in Anführungszeichen), kann aber auch mit "+" zusammengesetzt werden, ebenso als Ergebnis einer Funktion wie LEFT$(), MID$() usw. ist denkbar. Jeder Teil zwischen den "+" ist dort wiederum ein Stringausdruck, d.h. die Syntaxstruktur ist also rekursiv.

Nils hat Folgendes geschrieben:
Code:

routine:
paw# = paw# + 1: IF paw# = 4 THEN END


Das Programm soll also 3 Mal durchlaufen werden.

Und hier auch noch etwas "Schulung": Datentypen, hier Zahlentypen, sollte man immer passend der Anwendung wählen. z.B. doppeltgenaue Fliesskommazahl ist hier sicherlich fehl am Platz für den Zähler paw# -> In diesem Fall reicht Integer aus -> Nimm also besser paw%
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 20.02.2016, 23:28    Titel: Antworten mit Zitat

HorstD hat Folgendes geschrieben:

Richtig, da keine Leerzeichen erlaubt sind, wäre:

Code:
ram$ = LTRIM$(STR$(paw#)): nom$ = "B01 " + ram$

Nicht ganz. Das Leerzeichen in "B01 " ist auch verboten. Also entweder
Code:
ram$ = LTRIM$(STR$(paw#)): nom$ = "B01" + ram$
oder
Code:
ram$ = LTRIM$(STR$(paw#)): nom$ = "B01_" + ram$
oder einfacher
Code:
nom$ = "B01_" + LTRIM$(STR$(paw#))
oder gleich
Code:
OPEN "G:\B01_" + LTRIM$(STR$(paw#)) + ".TXT" FOR OUTPUT AS #1

wobei als Laufvariable unbedingt (s.o.) ein Integertyp verwendet werden sollte. Wenn nämlich durch interne Rundungsfehler paw# einen Wert wie 3.9999999999999 bekommt, erhält man

  • 1) mit STR$(paw#) keinen gültigen Dateinamen mehr und
  • 2) wird die Abbruchbedingung paw# = 4 niemals erfüllt, und man bekommt eine Endlosschleife.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 21.02.2016, 03:24    Titel: Antworten mit Zitat

@alle: Danke für Eure freundlichen Antworten!

Ihr habt vlt bei dem Beispielergebnis genauso wie ich erkannt, dass da noch irgendwie eine Variable die mit dem jeweils zweiten Wert zusammenhängt nicht auf Anfangssgtellung sein. Ich hab die auch gefunden und das korrigiert. Nichtsdestotrotz läuft das Teil immer noch nicht rund. Bin also schon leichtvam verzweifeln.

Einen eingeschränkten CLEAR Befehl gibt es wohl nicht!?

Als ich das soweit korrigiert hatte geschah etwas unerwartetes: Das Prog schrieb die 4 Dateien und statt zu stoppen schrieb es in der ersten datei unaufhöhrlich die zuletzt geschriebene Zeile. QB das unbekannte Wesen?

Daeshalb nochmals: Wie breche ich über Dosbox die Programmausführung ab und wo finde ich bei Dosbox den Backslash?

@ grindstone: Ja das stimmt. Eigentlich bräuchte ich Dezimalzahlen. Das geht soweit auch nicht. Es sei denn ich schriebe 15 und meinte 1,5. Die Bedeutung von LTRIM$ ist mir nicht so ganz klar. Das mit dem _ ginge.

@dreael: Warun funkt das mit dem goto routine: nicht?

@grindstone zum Zweiten: Meckert das QB nicht an wenn ein close zuwenig da ist?
Und: Wie wäre es denn mehrere Variablensätze in einer Textdatei zu speichern. Die würde ich dann mit einem kleinen Prog erzeugen. das eigentliche Programm müsste sich dann nach und nach den einen und dann den nächsten Variablensatz aus der Textdatei holen und verarbeiten.
Kannst Du mir da vlt was vorschlagen?

grüsse und guten morgen

Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 21.02.2016, 12:37    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
QB das unbekannte Wesen?
Nein. Ein Computer tut generell nicht das, was du willst, sondern das, was du ihm sagst. Und wenn beides nicht übereinstimmt, hast du (mindestens) ein Fehler im Programm. Hier ist wahrscheinlich genau das passiert, was ich im Zusammenhang mit Rundungsfehlern beschrieben habe: Die Abbruchbedingung wird nicht erfüllt, weil die Zahl ein ganz kleines bisschen daneben liegt, und das Programm läuft endlos weiter. Abhilfe könnte es schaffen, wenn du nicht auf = , sondern (wie auch FOR...NEXT) auf >= testest. Stilistisch sauber ist das allerdings auch nicht.
Zitat:
wo finde ich bei Dosbox den Backslash?
Arbeitest du vielleicht mit einer amerikanischen Tastaturbelegung?
Zitat:
Die Bedeutung von LTRIM$ ist mir nicht so ganz klar.
Damit werden alle Leerzeichen am Anfang einer Zeichenkette beseitigt. Diese Frage hätte dir übrigens auch ein scheuer Blick in die Befehlsreferenz (Hilfe -> Index) beantworten können.
Zitat:
Das mit dem _ ginge.
Du kannst das leicht automatisieren:
Code:
CLS
paw# = 1.7
PRINT paw#
ram$ = LTRIM$(STR$(paw#))
PRINT ram$
FOR x% = 1 TO LEN(ram$)
     IF MID$(ram$, x%, 1) = "." THEN
          MID$(ram$, x%, 1) = "_"
     END IF
NEXT
PRINT ram$

Zitat:
Meckert das QB nicht an wenn ein close zuwenig da ist?
Nicht unbedingt. Offene Dateien werden bei Programmende automatisch geschlossen. Nur wenn du versuchst, eine Datei unter einer Dateinummer zu öffnen, die gerade benutzt wird, gibt es eine Fehlermeldung.
Zitat:

Wie wäre es denn mehrere Variablensätze in einer Textdatei zu speichern. Die würde ich dann mit einem kleinen Prog erzeugen. das eigentliche Programm müsste sich dann nach und nach den einen und dann den nächsten Variablensatz aus der Textdatei holen und verarbeiten.
Kannst Du mir da vlt was vorschlagen?
Sicher. Aber dazu müsste ich etwas genauer wissen, was du vorhast.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 21.02.2016, 14:01    Titel: Antworten mit Zitat

Um den Deutschen Tastatur-Zeichensatz in der DosBox zu verwenden musst Du nach dem Start der DosBox nur "keyb de" eingeben!
Warum konfigurierst Du den Auteexec-Teil deiner dosbox(Version).conf nicht?
Die befindet sich im User-Verzeichnis (versteckt), kannst Du, je nach OS, entweder mit "Strg+H" oder "Alt+." sichtbar machen. Ganz am ende befindet sich eine Sektion "Autoexec". Da könntest Du dann z.B. folgendes eintragen:
keyb de
mount C (dein Verzeichnis)
set path= ...
u.s.w
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 21.02.2016, 15:43    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
Daeshalb nochmals: Wie breche ich über Dosbox die Programmausführung ab und wo finde ich bei Dosbox den Backslash?

Hier wäre es noch gut zu erfahren, warum das ganze Projekt nicht ebensogut in FreeBasic umgesetzt werden könnte. -> Notwendigkeit einer MS-DOS-Emulation fällt komplett weg und Du kannst beliebig lange Dateinamen verwenden.

Nils hat Folgendes geschrieben:
@dreael: Warun funkt das mit dem goto routine: nicht?

Und hier müsste ich am besten einmal Deinen bisherige Codeentwurf als Ganzes noch vor mir haben. Generall aber wird Dir hier jeder sofort sagen, dass GOTOs besser komplett eliminiert werden sollten und das Programm strukturiert aufgebaut werden sollte. In diesem Fall: Was spricht gegen eine FOR-Schleife?

Sonst versuche einmal aus der Perspektive eines Programmierteams zu formulieren, was die Lade- und Speicherroutine genau tun muss, damit Du diese Programmieraufgabe einem Kollegen erteilen könntest, und zwar so, dass Ihr am Schluss Eure Codes als Ganzes zusammenführen könntet.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 21.02.2016, 18:13    Titel: Antworten mit Zitat

@ grindstone:

Schaue gerade erst hier rein.

grindstone hat Folgendes geschrieben:
Nils hat Folgendes geschrieben:
QB das unbekannte Wesen?
Nein. Ein Computer tut generell nicht das, was du willst, sondern das, was du ihm sagst. Und wenn beides nicht übereinstimmt, hast du (mindestens) ein Fehler im Programm. Hier ist wahrscheinlich genau das passiert, was ich im Zusammenhang mit Rundungsfehlern beschrieben habe: Die Abbruchbedingung wird nicht erfüllt, weil die Zahl ein ganz kleines bisschen daneben liegt, und das Programm läuft endlos weiter. Abhilfe könnte es schaffen, wenn du nicht auf = , sondern (wie auch FOR...NEXT) auf >= testest. Stilistisch sauber ist das allerdings auch nicht.


Ich meinte das in etwa so: Ich remarke versehentlich ein end if. Aber angemeckert wird keine fehlendes end if sondern ein Fehler den ich mir ganz und gar nicht erklären kann.

grindstone hat Folgendes geschrieben:
Arbeitest du vielleicht mit einer amerikanischen Tastaturbelegung?

Eigentlich nicht. Und dort wüßte ich das backslash zu finden. Tatsächlich probierte ich die gesamte Tatstatur durch ohne fündig zu werden. Probiere das jetzt mal mit Elors Tip.

grindstone hat Folgendes geschrieben:
Du kannst das leicht automatisieren:


Schicker code! Den werde ich mal ausprobieren! Danke!


@ Elor:
Danke für Deinen Hinweis. Ich nehme Dosbox nur im absoluten Notfall, denn der Programmablauf dauert etwa um den Faktor 100 länger. Deshalb kümmere ich mich nicht so um Dosbox wie es das prog vlt verdient hätte.
Aber wieso soll ich "C" mounten? Hast Du Dich da vertippt? Doch wohl eher:
Code:
mount g:              [virtuelles Laufwerk g]
set path= C:\QB   [Pfad zum viruellen LW]
keyb de


@ dreael:
Da mein Programm mit den Jahren gewachsen ist, d.h. ich immer wieder Neuheiten reingestückelt habe ist mein Code natürlich ein Paradebeispiel für ChaosCode. So sollte man nur programmieren wenn man den code möglichst undurchschaubar machen möchte. Den zeig' ich lieber nicht vor zwinkern . Abgesehen davon sind die Algorithmen darin ziemlich fett grinsen .

@alle: Draußen regnets. Der Viererbob ist verloren. Da geh' ich nun beruhigt auf Fehlersuche. zwinkern


Elor Hilfe!!!: Nach Keyb de hab ich keine "Q" mehr! Was ist passiert?
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!


Zuletzt bearbeitet von Nils am 21.02.2016, 18:41, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
dreael
Administrator


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

BeitragVerfasst am: 21.02.2016, 18:39    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
@ dreael:
Da mein Programm mit den Jahren gewachsen ist, d.h. ich immer wieder Neuheiten reingestückelt habe ist mein Code natürlich ein Paradebeispiel für ChaosCode. So sollte man nur programmieren wenn man den code möglichst undurchschaubar machen möchte. Den zeig' ich lieber nicht vor ;) . Abgesehen davon sind die Algorithmen darin ziemlich fett :D .

Das Wichtigste vorab: Keine Angst vor irgendwelchen Sachen wie ausgelacht werden o.ä. - wir sind hier eine freundlich gesinnte Community gegenüber Einsteigern... ;-)

Da ich die Informatik inzwischen beruflich mache, weiss ich bestens: Auch in Firmen sind sehr viele Applikationen über die Jahre hinweg gewachsen. Manchmal gibt es daher halt einfach Punkte, ab denen über ein Code Refactoring nachgedacht werden muss. Dies ist typischerweise dann gegeben, wenn ein alter Code noch auf inzwischen veraltete Programmiertechniken basiert und die Wartbarkeit und Nachvollziehbarkeit nachlässt. Aus gutem Grund wird im professionellen Bereich auch immer der sog. Code Review empfohlen. Ist nichts anderes, als dass eine zweite, in der Regel immer unvoreingenommene Person (dies wir hier hier im Prinzip alle auch, wenn wir Dein Beispiel komplett das erste Mal sehen!) das Ganze durchliest und zu verstehen versucht, immer mit dem Ziel, dass er die Weiterentwicklung eines Programms weiterführen könnte, wenn der ursprüngliche Programmierer die Firma verlässt.

Übrigens schon in QB lassen sich einige heutzutage gebräuchliche Konzepte bereits anwenden, z.B. mit TYPE ein Objekt im Sinn einer Klasse defineren, alle Operationen in SUBs und FUNCTIONs einpacken. Artikel von mir dazu:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

=> am Ende das CAD-Programmbeispiel anschauen.

Ein Beispiel von mir, welches auch seine Wurzeln im Zeilennummern-BASIC-Zeitalter hatte und zuletzt den Sprung in die Objektorientierung vollzogen hat:

http://www.dreael.ch/Deutsch/Download/Zahnrad.html

=> Am besten einmal die Quellcodes der verschiedenen Versionen untereinander vergleichen. So ein ählicher Prozess wäre vermutlich auch für Deine Applikation sinnvoll.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 21.02.2016, 19:06    Titel: Antworten mit Zitat

Zitat:

Aber wieso soll ich "C" mounten? Hast Du Dich da vertippt? Doch wohl eher:
mount g: [virtuelles Laufwerk g]
set path= C:\QB [Pfad zum viruellen LW]
keyb de

Nein, ich hab mich nicht verschrieben! Das mount c ... war ja nur ein Beispiel fuer das mounten eines Verzeichnisses (was ja unter Linux nichts anderes ist als ein Virtuelles Laufwerk). Beispiel:
Du erstellst im Verzeichnis /home/[username]/ ein Ordner mit Namen "DOS". Dieses Verzeichnis kann man jetzt mit mount c DOS als Laufwerk c mounten, also als Laufwerk C ansprechen. Du kannst jeden beliebigen Buchstaben dafuer verwenden der als DOS-Laufwerksbezeichnung gueltig ist, also auch g. Da Du ja aber gefragt hast wie man die Deutsche Tastaturbelegung einstellt, ist eigentlich nur "keyb de" wichtig.
Zitat:

Danke für Deinen Hinweis. Ich nehme Dosbox nur im absoluten Notfall, denn der Programmablauf dauert etwa um den Faktor 100 länger. Deshalb kümmere ich mich nicht so um Dosbox wie es das prog vlt verdient hätte.

Wenn Du die DosBox nicht verwendest (außer im absoluten Notfall), in welcher Umgebung lässt Du dein Programm denn laufen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 21.02.2016, 22:03    Titel: Antworten mit Zitat

@ Elor:


Elor hat Folgendes geschrieben:
Wenn Du die DosBox nicht verwendest (außer im absoluten Notfall), in welcher Umgebung lässt Du dein Programm denn laufen?


Nun, auf einem uralt Rechner in einer öffentlichen Bibliothek!


Jetzt ist auch noch das "C" weg. Kein Witz! Ja! Erst das Q, jetzt das C.

Ich kann mir jetzt nicht mal mehr mein Prog anschauen. Was ich getan hab? Ich wollte mir da unter ctrl+F1 meine Abbruchmöglichkeit sichern. Da hab' ich wohl was falsch gemacht!?
Selbst DB verlassen und wieder aufrufen hilft nicht weiter.

grüsse Nils


Nachtrag: Bei mir erscheint jetzt im Befehlsfenster von DB: SET BLASTER=A220 I7 DI H5 T6 was das wohl bedeutet?

2. Nachtrag: C+Q sind wieder da. Habe die Keymapperdatei gelöscht und DB neu gestartet. Aber das backslash?
3. Nachtrag: Ja, Elor das geht ja tatsächlich. C ist gemounted. Ob ich da jetzt vollen Zugriff habe? Ich probiers.
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.02.2016, 00:09    Titel: Antworten mit Zitat

@Nils:
Großes Indianerehrenwort: Niemand wird dich hier auslachen! lächeln

Wohl die meisten von uns -einschliesslich mir- haben als Chaosprogrammierer angefangen, ganz einfach deshalb, weil das am ehesten der menschlichen Denkweise entspricht. Und bei kleineren Programmen funktioniert das ja auch meistens problemlos. Nur wenn die Programme dann umfangreicher werden, verliert man irgendwann zwangsläufig die Übersicht. Und ich weiß auch, daß die Einsicht, daß sich strukturiertes Programmieren lohnt, einen gewissen Leidensdruck erfordert.

Ich benutze ebenfalls -bis heute und regelmäßig- ein derart "gewachsenes" Programm. Begonnen hat es als einfaches QBasic - Script zum minuten(!)genauen herausschneiden von Stücken aus einer ADPCM - Audiodatei (Radiomitschnitt, per Analogeingang mit der Soundkarte aufgenommen), mittlerweile schneidet es sekundengenau, beherrscht mehrere Audioformate, arbeitet mit Multithreading, Callback - Routinen, WinAPI, Mausmenü für das DOS-Fenster, steuert Winamp, lädt Playlisten herunter und vieles mehr.

Tu dir einen Gefallen und sieh dir freeBasic wenigstens einmal an! Du mußt ja QBasic deswegen nicht sofort aufgeben. Ich habe auch eine ganze Weile FB und QB nebeneinander benutzt. Die meiste Arbeit beim Umstellen ist das Entfernen der Suffixe von den Variablen und deren Deklaration im Programmkopf. Aber auch da nimmt dir die "Ersetzen"- Funktion des Editors (FbIde oder FbEdit, ist im FB - Installationspaket enthalten) die meiste Arbeit ab.

Zitat:
Ich remarke versehentlich ein end if. Aber angemeckert wird keine fehlendes end if sondern ein Fehler den ich mir ganz und gar nicht erklären kann.
Mit solchen Seiteneffekten mußt du leben. So intelligent ist der Interpreter nicht, daß er diese Art von Fehlern erkennen könnte.

Zitat:
SET BLASTER=A220 I7 DI H5 T6
Da wird eine neue Umgebungsvariable angelegt, die zum Konfigurieren einer Soundblasterkarte dient.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 22.02.2016, 01:43    Titel: Antworten mit Zitat

@ grindstone

Dein Code ist gut! Danke.

Dank auch für Deine aufmunternden Worte. es sind leider immer noch Ameisen im Prog. Ich muß mir das Morgen mal in Ruhe in der Bib ansehen. Jetzt fallen mir die Augen zu.
Programmieren ist für mich nur Mittel zum Zweck. Der Zweck ist meine Algors laufen zu lassen udn die Ergebnisse irgendwie weiterverarbeitbar zu haben.
So eine vernünftige graphische Oberfläche wäre natürlich schön. Aber ...

Gibt es denn rigenwo ein empfehlenswertes beispiel vom Import von Variablendatensätzen aus einer .txt um damit zu arbeiten und danach einen weiteren satz zu laden denn Du kennst und mir empfehlen könntest?

Was hälst Du von Python?

Gute Nacht Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.02.2016, 14:04    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
es sind leider immer noch Ameisen im Prog.
Das meinte ich mit dem Leidensdruck. zwinkern

Zitat:
Gibt es denn rigenwo ein empfehlenswertes beispiel vom Import von Variablendatensätzen aus einer .txt um damit zu arbeiten und danach einen weiteren satz zu laden denn Du kennst und mir empfehlen könntest?
Das ist im Grunde ganz simpel:
Code:
datei$ = "k:\test.txt"

OPEN datei$ FOR OUTPUT AS #1
PRINT #1, "Datensatz1"
PRINT #1, 12.387
PRINT #1, 5
PRINT #1, "Datensatz2"
PRINT #1, 19.587
PRINT #1, 29
PRINT #1, "Datensatz3"
PRINT #1, 100.536
PRINT #1, -4
CLOSE

OPEN datei$ FOR INPUT AS #1
DO
     INPUT #1, nr1$
     INPUT #1, nr2#
     INPUT #1, nr3%
     PRINT nr1$
     PRINT nr2#
     PRINT nr3%
     PRINT
LOOP UNTIL EOF(1)
CLOSE
Ich hoffe, das Beispiel ist anschaulich genug.

Zitat:
Was hälst Du von Python?
Habe ich mich noch nie mit beschäftigt. Vielleicht kann einer von den anderen etwas dazu sagen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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