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:

Unterschiedlichen Satzaufbau speziell formatiert darstellen
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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 25.12.2020, 15:34    Titel: Unterschiedlichen Satzaufbau speziell formatiert darstellen Antworten mit Zitat

Hi!

Habe ein für mich sehr großes Projekt angefangen: Es geht darum für eine alte CNC-Steuerung (Fräsmaschine) CNC-Programme zu erstellen.
Bin schon gut vorran gekommen mit meinen Anfängerkentnissen aber Fragen gibt es zwinkern

Das Programm muss am Ende eine TXT-Datei sein welche einzelne speziell formatierte Sätze enthält mit den Befehlen. Es gibt 13 verschiedene Sätze die erzeugt werden können, teilweilweise wird je Satz dann EINE Zeile verwendet, bei manchen Sätzen werden aber bis zu SECHS Zeilen verwendet. Ich habe mal so ein Beispiel des fertigen CNC-Programmes hier: (Jede Zeile wird wie in Basic auch mit einer fortlaufenden Satznummer, gefolgt von Leerzeichen, geschrieben)

25 TOOL DEF 33 L +265,600
26 TOOL DEF 33 R +13,875

28 TOOL CALL 0 Z S 0,000

180 CYCL DEF 1.0 TIEFBOHREN
181 CYCL DEF 1.1 ABST -2,000
182 CYCL DEF 1.2 TIEFE -2,000
183 CYCL DEF 1.3 ZUSTLG-1,000
184 CYCL DEF 1.4 V.ZEIT 1,000
185 CYCL DEF 1.5 F60

186 LBL 0

425 STOP M05

427 CALL LBL 1 REP

428 TOOL CALL 1 Z S 800,000

431 A X+22,000 R0 F4500 M

Ich habe die einzelnen Sätze mit Leerzeilen getrennt um zu sehen welche zusammen gehören.

Ich habe ein Array mit 800 Zeilen erstellt (mit 8 Spalten) , eine ZEILE von diesem CNC-Programm wird immer in eine ZEILE von diesem Array erstellt - das heißt der Satz mit "CYCL-DEF-TIEFBOHREN" belegt dann SECHS ZEilen im Array.

Bin soweit dass mein Programm funktioniert und die Formatierung richtig statt findet.

Mich würde jetzt mal interessieren wie ein "Profi" das ganze lösen würde.
Ziel am Ende ist es ja das ganze so in eine Text-Datei zu bringen aber auch die Möglichkeit zu haben von einer Text-Datei das ganze einzulesen und zu editieren, das bereitet mir noch etwas Kopfzerbrechen wie ich die Formatierung exakt aus einer Datei einlese und in mein Array bringe ohne dass was durcheinander kommt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 26.12.2020, 01:53    Titel: Antworten mit Zitat

Hallo derampcsitzt, willkommen im Forum und frohe Weihnachten! lächeln

Meine CNC - Kenntnisse sind -zumindest was den Industriestandard angeht- zwar recht rudimentär (nennen wir es mal ein fundiertes Halbwissen grinsen ), aber ich ahne, was du vorhast und empfehle, UDTs zu verwenden. Das ist zwar -falls du noch nie damit gearbeitet haben solltest- erst einmal etwas gewöhnungsbedürftig, aber besonders bei größeren Programmen wesentlich übersichtlicher als das Hantieren mit mehrdimensionalen Arrays.

Hier mal quick (na ja... grinsen ) and dirty, wie so etwas inetwa aussehen könnte :
Code:

Dim As String datei = ExePath + "\daten.txt"

'testdatei anlegen
Open datei For Output As #1
Print #1, "25 TOOL DEF 33 L +265,600"
Print #1, "26 TOOL DEF 33 R +13,875"
Print #1, ""
Print #1, "28 TOOL CALL 0 Z S 0,000"
Print #1, ""
Print #1, "180 CYCL DEF 1.0 TIEFBOHREN"
Print #1, "181 CYCL DEF 1.1 ABST -2,000"
Print #1, "182 CYCL DEF 1.2 TIEFE -2,000"
Print #1, "183 CYCL DEF 1.3 ZUSTLG-1,000"
Print #1, "184 CYCL DEF 1.4 V.ZEIT 1,000"
Print #1, "185 CYCL DEF 1.5 F60"
Print #1, ""
Print #1, "186 LBL 0"
Print #1, ""
Print #1, "425 STOP M05"
Print #1, ""
Print #1, "427 CALL LBL 1 REP"
Print #1, ""
Print #1, "428 TOOL CALL 1 Z S 800,000"
Print #1, ""
Print #1, "431 A X+22,000 R0 F4500 M"
Close #1

Type tCNCzeile
   zeilennr As Integer
   parameter(Any) As String 'dynamisches parameterarray
   Declare Property zeile As String
   Declare Property zeile(z As String)
End Type

Property tCNCzeile.zeile As String
   'wandelt den inhalt des UDT in eine textzeile um und gibt diese aus
   Dim As String ausgabe = ""
   Dim As Integer x
   
   With This
      If .zeilennr Then 'wenn die zeilennummer 0 ist, ist dieser UDT leer ( = unbenutzt --> leerzeile im text)
         ausgabe = Str(.zeilennr) 'schreibt die zeilennummer in den ausgabestring
         For x = LBound(.parameter) To UBound(.parameter) 'parameterarray auslesen
            ausgabe += " " + .parameter(x) 'leerzeichen + parameter an ausgabesting anhängen
         Next
      EndIf
      Return ausgabe
   End With
End Property

Property tCNCzeile.zeile(z As String)
   'zerlegt eine textzeile und schreibt die elemente in den UDT
   Dim As Integer anfang, ende, x
   With This
      ReDim .parameter(0)
      x = -1
      If Len(z) Then 'keine leerzeie
         z += " " 'leerzeichen anhängen, damit der parser funktioniert
         ende = InStr(z, " ") 'zeiger auf leerzeichen nach der zeilennummer setzen
         .zeilennr = Val(Left(z, ende)) 'zeilennummer isolieren
         Do 'restlichen string auswerten
            anfang = ende + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
            ende = InStr(anfang, z, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
            If ende = 0 Then 'kein weiterer parameter vorhanden
               Exit Do 'schleife verlassen
            Else
               x += 1
               ReDim Preserve .parameter(x) 'parameterarray erweitern
               .parameter(x) = Mid(z, anfang, ende - anfang) 'parameter isoliern und in array schreiben
            EndIf
         Loop
      EndIf
   End With
End Property

ReDim As tCNCzeile ct(1) 'UDT - array anlegen
Dim As Integer index
Dim As String g, r

Open datei For Input As #1
index = 0
   
Do
   index += 1
   Line Input #1, g 'textzeile aus datei einlesen
   Print g; "*" 'eingelesene zeile ausdrucken
   ReDim Preserve ct(UBound(ct) + 1) 'UDT - array um ein element erweitern
   ct(index).zeile = g 'textzeile in UDT - element schreiben
   r = ct(index).zeile 'daten aus UDT - element auslesen und in textzeile zurückverwandeln
   Print r; "*"', UBound(ct(index).parameter);" ";SizeOf(ct(index)) 'ausgelesene zeile ausdrucken
   Print
Loop Until Eof(1)
Close #1

Sleep

'zur simulation der eingabe
bohren:
Data "CYCL DEF 1.0 TIEFBOHREN"
Data "CYCL DEF 1.1 ABST -2,000"
Data "CYCL DEF 1.2 TIEFE -2,000"
Data "CYCL DEF 1.3 ZUSTLG-1,000"
Data "CYCL DEF 1.4 V.ZEIT 1,000"
Data "CYCL DEF 1.5 F60"
Data "*"



Type tCNCsatz
   As tCNCzeile zeile(Any)
   As Integer anfangszeile
   Declare Sub eingabe(art As String)
   Declare Sub ausgabe(filenr As Integer, anfzeile As Integer)
End Type

Sub tCNCsatz.eingabe(art As String)
   ReDim zeile(0)
   Dim As Integer x = 0
   Dim As String d
   
   With This
      Select Case art 'art des satzes auswählen
         Case "bohren"
            'zur demonstration eingabe aus DATA-zeilen. später steht hier die eingabemaske
            Restore bohren
            Do
               Read d 'eine DATA - zeile einlesen
               If d = "*" Then 'ende
                  Exit Do 'schleife verlassen
               EndIf
               ReDim Preserve .zeile(x) 'neuen UDT vom typ tCNCzeile erzeugen
               .zeile(x).zeile = Str(x + 1) + " " + d 'anweisung mit zeilennummer ab 1 in UDT schreiben
               x += 1 'index erhöhen
            Loop
            
         Case "werkzeug"
            '...
            'usw.
            
            
      End Select
   End With   
End Sub

Sub tCNCsatz.ausgabe(filenr As Integer, anfzeile As Integer)
   Dim As Integer x
   Dim As String g
   
   If filenr = 0 OrElse anfzeile = 0 Then 'fehlende angabe(n)
      Return
   EndIf
   
   With This
      For x = LBound(.zeile) To UBound(.zeile) 'alle zeilen des satzes
         .zeile(x).zeilennr = anfzeile + x 'korrekte zeilennummer in unterarray schreiben
         Print #filenr, .zeile(x).zeile 'zeile in datei schreiben
      Next
   End With
End Sub

'---------------------------

ReDim As tCNCsatz bohren(1) 'einen satz zur probe anlegen

bohren(1).eingabe("bohren") 'satz "bohren" erzeugen

Open ExePath + "\bohren.txt" For Output As #1 'ausgabedatei zum schreiben öffnen

bohren(1).ausgabe(1, 180) 'soeben erzeugten satz mit anfangszeilennummer 180 in datei #1 schreiben

Close #1 'ausgabedatei schliessen

Print "-----------------"

Open ExePath + "\bohren.txt" For Input As #1 'ausgabedatei zum lesen öffnen
Do 'datei ausdrucken
   Line Input #1, g
   Print g
Loop Until Eof(1)
Close #1

Sleep


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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 26.12.2020, 15:39    Titel: Antworten mit Zitat

Uffff hallo verlegen

Danke für die Mühe, nur scheint das was anderes zu sein, da kommen ja Befehle vor die es bei mir gar nicht gibt - das scheint dann wohl FreeBASIC zu sein oder? Ich Befasse mich nur mit QuickBasic zwinkern

Hier mal ein Video von meinem Programm bisher. Was jetzt noch fehlt ist die Ausgabe in eine txt-Datei

https://www.youtube.com/watch?v=R6I5Y2q0vxM&feature=youtu.be

Wichtig ist dass man schnell nur mit Tasteneingabe die Zyklen schreiben kann. so ist die orignale Programmierung direkt an der Mschine gelöst. Da hat man für jeden einzelnen Zyklus eine extra Taste mit welcher man den Dialog beginnt und dann mit einem Zahlenblock die Eingaben vornimmt.
Meine Programm bildet dieses Schema fast genau so ab.

Servus
Markus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 26.12.2020, 17:18    Titel: Antworten mit Zitat

Grindstones Code ist in FreeBASIC, aber ich denke, das meiste kann man ohne große Probleme in QBasic "zurückübersetzen". Leider bin ich aus QBasic schon lange draußen und kann da jetzt nicht viel sagen.

Die erste Zeile kannst du in zwei Programmzeilen aufspalten (einmal das DIM und einmal die Zuweisung). Ob QBasic bei den UDTs mehr kann als nur Variablen gruppieren, weiß ich nicht - die Properties würden sich jedenfalls auch durch Prozeduren ersetzen lassen, denen man dann noch zusätzlich das entsprechende Objekt mitgeben muss. THIS kennt QBasic vermutlich auch nicht, aber das wird dann beim Umschreiben in Prozeduren sowieso hinfällig.

Vielleicht hilft dir das etwas weiter.
_________________
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
dreael
Administrator


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

BeitragVerfasst am: 26.12.2020, 18:24    Titel: Antworten mit Zitat

Am besten einmal den bisherigen Quellcode zur Verfügung stellen.

Ansonsten wäre FreeBasic die bessere Wahl, weil es auch auf einem modernen Windows 10-Rechner in 64-Bit läuft, ausser Du willst ein Computermuseum mit MS-DOS 6.22-Rechnern pflegen...

Vielleicht auch bekanntgeben, in welcher Form letztlich die CNC-Maschine die Daten entgegenimmt (Diskette? Serielle Schnittstelle? Oder hätte es bereits einen USB-Port für einen Stick? Oder gar mit IP-Adresse ins LAN eingebunden?).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 26.12.2020, 20:53    Titel: Antworten mit Zitat

dreael hat Folgendes geschrieben:



Vielleicht auch bekanntgeben, in welcher Form letztlich die CNC-Maschine die Daten entgegenimmt (Diskette? Serielle Schnittstelle? Oder hätte es bereits einen USB-Port für einen Stick? Oder gar mit IP-Adresse ins LAN eingebunden?).


Man muss direkt den PC über die serielle Schnittstelle (v.24) verbinden und kann mittels einer Software vom Hersteller die .txt-Datei dann übertragen.
Von daher ist es also sowieso sinnvoll einen alten Rechner zu verwenden.
Ansonsten kann mein Basic-Programm auch in einer DosBox laufen auf modernem System.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 26.12.2020, 23:37    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
...das scheint dann wohl FreeBASIC zu sein oder?
Ja, entschuldige. Daß das hier das Unterforum QBasic ist, hatte ich glatt übersehen. traurig

Allerdings schliesse ich mich dreael an, du solltest dir freeBasic zumindest einmal ansehen. Der FB - Compiler hat unter anderem eine QB - Option, mit der er auch QBasic - Quelltexte verarbeiten kann, du kannst also sofort loslegen. lächeln

Von den vielen Vorteilen von freeBasic möchte ich hier nur zwei aufzählen: Einmal bekommst du ausführbare .exe - Dateien, die um mindestens den Faktor 100 schneller laufen als der QB - Interpreter, zum anderen hast du die Auswahl zwischen mehreren zeitgemässen Editoren, denn der originale QB - Editor ist -zumindest meiner bescheidenen Meinung nach- nach heutigen Maßstäben eine Zumutung.

Weitere Vorteile von FB wie der Wegfall der 64kB-Grenze, eingebaute Maus- und Joystickabfrage und Zugriff auf die WinAPI seien hier nur am Rande erwähnt.

Das Umschreiben der QB-Quelltexte auf FB ist kein Hexenwerk, ich bin seinerzeit selbst umgestiegen und kann dir falls erforderlich meine Hilfe anbieten.

Trotzdem habe ich hier -für alle Fälle- den QB-Interpreter griffbereit. Wenn du deinen QB - Quelltext posten würdest (sofern es kein Geheimnis ist), könnte ich mal einen Blick drauf werfen.

Ansonsten schöne Restweihnachten und bleib gesund!

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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 27.12.2020, 00:08    Titel: Antworten mit Zitat

Danke für die Hilfe, werde aber wohl bei QuickBasic bleiben. Ich mag die alte Technik und arbeite damit an meinen alten Pentium-Rechnern zwinkern Eigentlich habe ich gar keine Zeit für die ganzen Scherze und das Projekt hier läuft eh völlig aus dem Ruder und mich da jetzt noch mit einer "neuen" Sprache beschäftigen...
Habe da jetzt sau viel Quellcode schon geschrieben und bin soweit dass meine Inhalte in eine Datei geschrieben werden und somit das Programm eigentlich fast Einsatzbereit ist für's Erste.
Trau mich eigentlich gar nicht das ganze zu zeigen so chaotisch wie das bei mir geschrieben ist - da flieg ich hochkant ausm Forum und mein Internet wird gelöscht durchgeknallt

Was jetzt aber wirklich noch nach extrem viel Arbeit aussieht: Beim Einlesen einer so formatierten .txt -Datei in meine Variablen (egal wie man die jetzt anlegt) steht man vor dem Problem dass man zwar Satz für Satz einliest aber man beim Einlesen NICHT weiß wie der Satz formatiert ist und somit die Trennung der einzelnen Satzteile total aufwändig wird...

Um das mal zu verdeutlichen zwei unterschiedliche Zyklen direkt aus der fertigen txt-Datei:

25 TOOL DEF 33 L +265,600
26 TOOL DEF 33 R +13,875

29 A Z+270,000 R0 F1000 M5

WEnn ich die Daten ERSTELLE wird mit Input der Nutzer nach einander nach folgenden Werten gefragt:

------erster Zyklus
welcher Zyklus? -> TOOL DEF -> kommt ins Array$(zeile,0)
Werkzeugnummer? -> 33 -> kommt ins Array$(zeile,1)
Länge? ->L+265,600 -> kommt ins Array$(zeile,2)
Radius? ->R+13,875 -> kommt ins Array$(zeile,3)

-------zweiter Zyklus
welcher Zyklus? -> A -> kommt ins Array$(zeile,0)
X /Y/ Z ? ->Z -> kommt ins Array$(zeile,1)
Wert eingeben ->+270,000 kommt ins Array$(zeile,2)
R+/R-/R0? -> R0 kommt ins Array$(zeile,3)
Vorschub? ->F1000 kommt ins Array$(zeile,4)
M-Befehl? ->M5 kommt ins Array$(zeile,5)

Das Array wird dan über eine einfache schleife auf dem Bildschirm Zeilenweise dargestellt und ebenso in die Datei gespeichert wobei die Leerzeichen IM Array mit dem eingegebenen Werten gespeichert werden(war ne riesen arbeit für jede Zyklusart eine eigene Sub zu erstellen welche die Daten richtig in das Array formatiert)

Nur wenn ich jetzt solche Sätze aus einer Datei einlesen will in mein Array - wie mache ich das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 27.12.2020, 01:59    Titel: Antworten mit Zitat

Bin jetzt grade dabei meine Formatierung zu überarbeiten (Habe den Befehl "Space$(...)" Entdeckt lächeln )

Die einzelne Sätze beim Einlesen aus der Datei werde ich wohl anhand des ersten Buchstaben je Zeile unterscheiden und dann mit Programmverzweigungen entsprechen den Satz richtig formatiert in das Array einlesen - das heißt je nach Satzaufbau muss der Satz in unterschiedlich lange Teile zerlegt werden - das wird ein haufen Zählerei geben... mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 27.12.2020, 19:45    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
Man muss direkt den PC über die serielle Schnittstelle (v.24) verbinden und kann mittels einer Software vom Hersteller die .txt-Datei dann übertragen.

Nur zur Info: Die von mir genannte ThinkCentre M57-Hardware besitzt immer noch einen richtigen seriellen Port. Dieser funktioniert auch unter 64 Bit bestens. Kann beispielsweise mit PuTTY getestet werden.

Mittlerweile auch geeignet: Diese USB->RS232-Adapter. Mit solchen habe ich auch schon gearbeitet, z.B. Cisco-ähnliche Netzwerkhardware mittels CLI-Konsole konfigrurieren. Einen solchen würde ich auch einmal testen (kostet nur wenige Euro) und schon eignet sich auch das moderne Windows 10-Notebook für die Ansteuerung Deiner Werkzeugmaschine.

derampcsitzt hat Folgendes geschrieben:
Danke für die Hilfe, werde aber wohl bei QuickBasic bleiben. Ich mag die alte Technik und arbeite damit an meinen alten Pentium-Rechnern ;)

Dann würde ich mich an Deiner Stelle mit Ersatz-Hardware aus EBay eindecken. ;-)

derampcsitzt hat Folgendes geschrieben:
Habe da jetzt sau viel Quellcode schon geschrieben und bin soweit dass meine Inhalte in eine Datei geschrieben werden und somit das Programm eigentlich fast Einsatzbereit ist für's Erste.
Trau mich eigentlich gar nicht das ganze zu zeigen so chaotisch wie das bei mir geschrieben ist - da flieg ich hochkant ausm Forum und mein Internet wird gelöscht :x

Solche Ängste musst Du hier nicht haben. Jeder fängt einmal ganz vorne an.

Wir kennen zwar Deinen Quellcode nicht, aber möglicherweise trifft das Eine oder Andere aus

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

zu. In Python-Tutorials liest man nicht vergeblich: "Don't repeat yourself.", d.h. Copy&Paste-Code sollte vermieden werden.

Zum eigentlichen Problem: Im Grunde genommen braucht es für so einen Editor Listen. Denn Listen (nicht mit Arrays zu verwechseln!) unterstützen Dinge wie insertElement(), append() und deleteElement(). Dann muss die .txt-Speicherroutine nur noch einen For Each über alle Listenelemente machen.

Ich meinte, dass hier im Forum auch schon FreeBasic-Projekte für Listen vorgestellt wurden. Und natürlich Java und Python kennen Listen auf jeden Fall.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 27.12.2020, 21:37    Titel: Antworten mit Zitat

Den Quellcode kann ich ja hier nicht einfach so reinstellen und die Datei hochladen geht ja auch nicht hier...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.12.2020, 22:04    Titel: Antworten mit Zitat

Hallo,

Quellcode kannst du einfach hier rein kopieren.

Am besten du setzt in deinem Posting Code-Tags drum herum:

Aus

[code]
Print "Hallo Welt"
Sleep
End
[/code]

wird
Code:
Print "Hallo Welt"
Sleep
End


Wenn du in QBasic deinen Quelltext im Textformat statt Binär speicherst, kannst du die BAS-Datei zum Beispiel mit dem Windows-Editor notepad öffnen und den Inhalt ins Forum kopieren.



Viele Grüße!
Sebastian
_________________

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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 27.12.2020, 22:40    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hallo,

Quellcode kannst du einfach hier rein kopieren.

Viele Grüße!
Sebastian


Äh das sind gefühlt 3000 Seiten Quellcode und in zig verschiedenen SUB's verteilt mit den Augen rollen

EDIT: Geht ja doch

Code:

DECLARE SUB menu2 ()
DECLARE SUB polkoord ()
DECLARE SUB Pol ()
DECLARE SUB lblset ()
DECLARE SUB lblcall ()
DECLARE SUB wkzVerw ()
DECLARE SUB cyclstop ()
DECLARE SUB Vzeit ()
DECLARE SUB TCall ()
DECLARE SUB satzspeichern ()
DECLARE SUB Tiefbohren ()
DECLARE SUB Gewbohren ()
DECLARE SUB Nuten ()
DECLARE SUB Taschen ()
DECLARE SUB tooldef ()
DECLARE SUB eingzeigen ()
DECLARE SUB zeiledazu ()
DECLARE SUB satzschreiben ()
DECLARE SUB cyclcall ()
10 CLS : COLOR 10, 8
20 DIM tb$(4)
30 DIM gb$(3)
40 DIM nf$(5)
45 DIM tf$(5)
90 DIM ai$(3)
100 DIM SHARED zeileeing%: zeileeing% = 11  'Zeilennummer fr die locate "Eingabezeile"

140 DIM SHARED eingtrue%     'wird auf 1 gesetzt wenn satzschreiben aktiv
150 DIM SHARED zeile%: zeile% = 1
151 DIM SHARED satztemp$(8)  'bei Dateneingabe werden hier der Satz gespeichert 
160 DIM tastea$
170 DIM SHARED inhalta$(801, 8)
    DIM SHARED zyklen$(1 TO 15)

    zyklen$(1) = "TOOL DEF "
    zyklen$(2) = "TOOL CALL"
    zyklen$(3) = "A "
    zyklen$(4) = "I "
    zyklen$(5) = "CYCL DEF 5."
    zyklen$(6) = "CYCL DEF 6."
    zyklen$(7) = "CYCL DEF 1."
    zyklen$(8) = "STOP    "
    zyklen$(9) = "CYCL DEF 3."
    zyklen$(10) = "CYCL DEF 4."
    zyklen$(11) = "CYCL DEF 9."
    zyklen$(12) = "CYCL DEF 2."
    zyklen$(13) = "LBL "
    zyklen$(14) = "CALL LBL "
   
180 zeile% = 1
181 FOR test% = 0 TO 100
182 FOR ywei% = 0 TO 8
183 inhalta$(test%, ywei%) = "": NEXT ywei%
188 NEXT test%


'schleifenbeginn/////////////////////////////////////////////////

300 DO UNTIL tastea$ = CHR$(27)    '"q"
305
310 'IF eingtrue% = 1 THEN GOTO 506

400 tastea$ = INKEY$
410 IF tastea$ = CHR$(27) THEN CLS : END

SELECT CASE tastea$
CASE CHR$(0) + CHR$(77)
eingtrue% = 1
CALL satzschreiben
LOCATE 12, 5

CASE "<"
CALL menu2

END SELECT
IF eingtrue% > 0 THEN GOTO 430

420 SELECT CASE tastea$
 CASE CHR$(0) + CHR$(82): CALL zeiledazu 'leere Zeile hinzufgen
 CASE CHR$(0) + CHR$(80): zeile% = zeile% + 1  'aktuell Zeile verschieben
 CASE CHR$(0) + CHR$(72): zeile% = zeile% - 1  'aktuelle Zeile verschieben
CASE CHR$(0) + CHR$(71): LOCATE zeileeing%, 5: COLOR 7, 1             'Springe zu Satz?
 CASE "w"
        CALL wkzVerw
        GOTO 9999
 'PRINT "Abbrechen mit e"
 
 INPUT "Gehe zu Zeile  (1 bis 800) ", gehe%
 IF gehe% > 0 AND gehe% < 801 THEN zeile% = gehe%
END SELECT

430 IF zeile% < 1 THEN zeile% = 1
440 IF zeile% > 800 THEN zeile% = 800


CALL eingzeigen

'END IF



9999 SLEEP .1: LOOP









END

SUB cyclcall
END SUB

SUB cyclstop
650 CALL eingzeigen
52 satztemp$(0) = zyklen$(8)
 LOCATE zeileeing%, 5: COLOR 0, 14
 INPUT "M-Befehl eingeben (leer fr keinen)", eingabe$
 IF eingabe$ = "q" THEN
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

 ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 3 THEN
    satztemp$(1) = eingabe$
 ELSEIF eingabe$ = "" THEN
    satztemp$(1) = ""
 ELSE GOTO 650
 END IF
 
FOR ui% = 2 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%

END SUB

SUB datinput


END SUB

SUB eingzeigen

COLOR 10, 0: CLS
'IF eingtrue% > 0 THEN LOCATE (zeileeing% - 1), 25: COLOR 7, 4: PRINT "Eingabemodus"
LOCATE 2, 6: COLOR 10, 0
 az% = 2 'anfangswert fur erste Zeile auf Bildschirm
 FOR aa% = -4 TO 4
 IF aa% = 0 THEN COLOR 11, 6
 IF zeile% + aa% < 1 THEN GOTO 900
 IF zeile% + aa% > 800 THEN GOTO 900
 LOCATE az%, 1: PRINT zeile% + aa%
 cc% = 4
FOR schreib% = 0 TO 6
 LOCATE az%, cc%: PRINT inhalta$(zeile% + aa%, schreib%)
 cc% = cc% + LEN(inhalta$(zeile% + aa%, schreib%))'z„hlt cursorposition nach rechts
NEXT schreib%

900 COLOR 10, 0
 az% = az% + 1: NEXT aa%

LOCATE 1, 20: COLOR 3, 1
SELECT CASE eingtrue%
CASE 0: PRINT "Hauptmen"
CASE 1: PRINT "Satz neu schreiben"
END SELECT


FOR te% = 0 TO 7
LOCATE (te% + 2), 50
PRINT satztemp$(te%)
NEXT te%

'------tempor„ren Satz bei eingabe anzeigen------
LOCATE (zeileeing% + 1), 2
FOR tf% = 0 TO 7
COLOR 3, 1: PRINT satztemp$(tf%);
NEXT tf%

LOCATE zeileeing% + 2, 1   'LINIE ERZEUGEN
FOR linie% = 1 TO 80
PRINT CHR$(61);
NEXT linie%


IF eingtrue% = 0 THEN GOTO 1004

905 LOCATE (zeileeing% + 4), 3
910 COLOR 3, 8: PRINT "|Befehl/Zyklus"; "       |TASTE|"
920 COLOR 7, 8
    LOCATE , 3: PRINT CHR$(179); "Werkzeug Definition "; CHR$(179); "  L  "; CHR$(186)
                       
930 LOCATE , 3: PRINT CHR$(179); "Werkzeug Aufruf     "; CHR$(179); "  T  "; CHR$(186)
940 LOCATE , 3: PRINT CHR$(179); "Absolut/Inkremental "; CHR$(179); " A/I "; CHR$(186)
950 LOCATE , 3: PRINT CHR$(179); "Polarkoordinaten    "; CHR$(179); "  P  "; CHR$(186)
960 LOCATE , 3: PRINT CHR$(179); "Pol                 "; CHR$(179); "  M  "; CHR$(186)
970 LOCATE , 3: PRINT CHR$(179); "Tiefbohren          "; CHR$(179); "  B  "; CHR$(186)
    LOCATE , 3: PRINT CHR$(179); "STOP                "; CHR$(179); "  S  "; CHR$(186)


    LOCATE (zeileeing% + 4), 35: COLOR 3, 8
                  PRINT "|Befehl/Zyklus"; "        |TASTE|": COLOR 7, 8
980  LOCATE (zeileeing% + 5), 35
990  LOCATE , 35: PRINT CHR$(186); "Nutenfraesen         "; CHR$(179); "  N  "; CHR$(179)
1000 LOCATE , 35: PRINT CHR$(186); "Taschenfraesen       "; CHR$(179); "  D  "; CHR$(179)
     LOCATE , 35: PRINT CHR$(186); "Verweilzeit          "; CHR$(179); "  V  "; CHR$(179)
     LOCATE , 35: PRINT CHR$(186); "Gewindebohren        "; CHR$(179); "  G  "; CHR$(179)
     LOCATE , 35: PRINT CHR$(186); "Label setzen         "; CHR$(179); "  K  "; CHR$(179)
1002 LOCATE , 35: PRINT CHR$(186); "Label aufrufen       "; CHR$(179); "  C  "; CHR$(179)
     LOCATE , 35: PRINT CHR$(186); "Abbruch ohne Eingabe "; CHR$(179); "  Q  "; CHR$(179)
1003 COLOR 10, 0
GOTO 1005



1004 FOR striche% = 0 TO 8
COLOR 7, 8
LOCATE (zeileeing% + 4 + striche%), 31: PRINT CHR$(179) '"|"
LOCATE (zeileeing% + 4 + striche%), 39: PRINT CHR$(179)'"|"
LOCATE (zeileeing% + 4 + striche%), 1: PRINT CHR$(179)'"|"
NEXT striche%

LOCATE (zeileeing% + 4), 2
COLOR 3, 8: PRINT "      BEFEHL": LOCATE (zeileeing% + 4), 33: PRINT "TASTE"
COLOR 7, 8: LOCATE , 4: PRINT "vorherigen Satz anw„hlen";
LOCATE (zeileeing% + 5), 35: PRINT CHR$(24)
COLOR 7, 8: LOCATE , 4: PRINT "n„chsten Satz anw„hlen     "
LOCATE (zeileeing% + 6), 35: PRINT CHR$(25)
COLOR 7, 8: LOCATE , 4: PRINT "Satz neu schreiben"
LOCATE (zeileeing% + 7), 35: PRINT CHR$(26)
COLOR 7, 8: LOCATE , 4: PRINT "Leeren Satz hinzufgen"
LOCATE (zeileeing% + 8), 33: PRINT "Einfg"
COLOR 7, 8: LOCATE , 4: PRINT "Programm Beenden"
LOCATE (zeileeing% + 9), 33: PRINT "ESC"
COLOR 7, 8: LOCATE , 4: PRINT "Springe zu Satznummer:"
LOCATE (zeileeing% + 10), 33: PRINT "Pos1"
COLOR 7, 8: LOCATE , 4: PRINT "Hilfeseite aufrufen"
LOCATE (zeileeing% + 11), 33: PRINT "  H"
COLOR 7, 8: LOCATE , 4: PRINT "Dateimen aufrufen"
LOCATE (zeileeing% + 12), 33: PRINT "  <"

1005 PRINT
END SUB

SUB Gewbohren

250 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(12)
satztemp$(1) = "0 GEWINDEBOHREN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 250
END IF


251 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$

ELSE GOTO 251
END IF

253 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Verweilzeit eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(4) = "3 V.ZEIT " + eingabe$

ELSE GOTO 253
END IF

254 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(5) = "4    F" + eingabe$
ELSE GOTO 254
END IF



FOR ui% = 6 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%




END SUB

SUB lblcall
670 CALL eingzeigen
 satztemp$(0) = zyklen$(14)
 LOCATE zeileeing%, 5: COLOR 0, 14
 INPUT "Label-Nr eingeben ", eingabe$
 IF eingabe$ = "q" THEN
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

 ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 4 THEN
    satztemp$(1) = eingabe$
 'ELSEIF eingabe$ = "" THEN
  '  satztemp$(1) = ""
 ELSE GOTO 670
 END IF

CALL eingzeigen

 LOCATE zeileeing%, 5: COLOR 0, 14
 INPUT "Wiederholungen eingeben ", eingabe$
 IF eingabe$ = "q" THEN
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

 ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 4 THEN
    satztemp$(2) = "  Rep "
    satztemp$(3) = eingabe$
 ELSEIF eingabe$ = "" THEN
    satztemp$(2) = "  Rep "
    satztemp$(3) = "0"
 ELSE GOTO 670
 END IF



FOR ui% = 4 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%


END SUB

SUB lblset
CLS
COLOR 9, 7
PRINT "-------------"
PRINT "N"; ""; "N"
PRINT "N"; " "; "N"
PRINT "__________"
SLEEP
END SUB

SUB menu2
DO UNTIL eing$ = "e"
eing$ = INKEY$
COLOR 0, 7: CLS
LOCATE 2, 3: COLOR 15, 5
PRINT "Speichern(S)     ™ffnen(O)     Laufwerk ausw„hlen(L)      Hauptmen"
PRINT "-----------------------------------------------------------------"
COLOR 6, 7: PRINT "abcedne”ljha”oj"
IF eing$ = "s" THEN GOSUB 1200
'chdir
SLEEP
LOOP
GOTO 2000
'SLEEP
'END

'--------------S„tze aus Datei holen-----------------
'1100 OPEN "cncprg.txt" FOR INPUT AS #2
'for





'--------------S„tze in Datei schreiben und speichern-------
1200 OPEN "cncprg.txt" FOR OUTPUT AS #1
FOR ausg% = 1 TO 800
    PRINT 1#, ausg%;
    PRINT ausg%;
        FOR acht% = 0 TO 7
        PRINT #1, inhalta$(ausg%, acht%); ' : NEXT acht%
        PRINT inhalta$(ausg%, acht%); : NEXT acht%
        PRINT #1, inhalta$(ausg%, 8)
        PRINT inhalta$(ausg%, 8)
NEXT ausg%

CLOSE #1
RETURN












2000 END SUB


SUB Nuten
560 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(9)
satztemp$(1) = "0 NUTENFRAESEN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 560
END IF


562 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$

ELSE GOTO 562
END IF

563 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG " + eingabe$
ELSE GOTO 563
END IF

564 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "1. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)

    CASE "x"
        satztemp$(5) = "4 X " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "y"
        satztemp$(5) = "4 Y " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "z"
        satztemp$(5) = "4 Z " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE ELSE
        GOTO 564
    END SELECT


565 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "2. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)

    CASE "x"
        satztemp$(6) = "5 X " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "y"
        satztemp$(6) = "5 Y " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "z"
        satztemp$(6) = "5 Z " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE ELSE
        GOTO 565
    END SELECT


566 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(7) = "6 F " + eingabe$
ELSE GOTO 566
END IF



'FOR ui% = 7 TO 8
satztemp$(8) = ""
'NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%

END SUB

SUB Pol

780 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POL 1. Koordinate eingeben (a/i und x/y/z Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 2)
        CASE "ax", "ay", "az", "ix", "iy", "iz"
        satztemp$(0) = zyklen$(6)
        satztemp$(1) = "0 POL "
        satztemp$(2) = "1 " + UCASE$(LEFT$(eingabe$, 1)) + " "
        satztemp$(3) = UCASE$(MID$(eingabe$, 2, 1)) + " "
        satztemp$(4) = MID$(eingabe$, 3, LEN(eingabe$)) + " "


CASE ELSE
GOTO 780
END SELECT


782 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POL 2. Koordinate eingeben (a/i und x/y/z Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 2)
        CASE "ax", "ay", "az", "ix", "iy", "iz"
        'satztemp$(5) = "0 POL "
        satztemp$(6) = "2 " + UCASE$(LEFT$(eingabe$, 1)) + " "
        satztemp$(7) = UCASE$(MID$(eingabe$, 2, 1)) + " "
        satztemp$(8) = MID$(eingabe$, 3, LEN(eingabe$)) + " "


CASE ELSE
GOTO 782
END SELECT

'FOR ui% = 5 TO 8
'satztemp$(ui%) = ""
'NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%




END SUB

SUB polkoord
850 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POLAR-RADIUS eingeben (a/i Pflichteingabe!) ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)
        CASE "a", "i"
        satztemp$(0) = zyklen$(5)
        satztemp$(1) = "0 POLAR_KOORD."
        satztemp$(2) = "1 " + UCASE$(LEFT$(eingabe$, 1)) + " P.R. "
        satztemp$(3) = MID$(eingabe$, 2, LEN(eingabe$)) + " "


CASE ELSE
GOTO 850
END SELECT


852 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POLAR-WINKEL eingeben (a/i Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)
        CASE "a", "i"
        satztemp$(4) = "2 " + UCASE$(LEFT$(eingabe$, 1)) + " P.W. "
        satztemp$(5) = MID$(eingabe$, 2, LEN(eingabe$))


CASE ELSE
GOTO 852
END SELECT

854 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Vorschub F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

IF LEN(eingabe$) > 0 AND LEN(eingabe$) < 5 THEN
    satztemp$(6) = "3 F "
    satztemp$(7) = eingabe$
 
 ELSE
GOTO 854
       END IF

856 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "M-Befehl eingeben (leer fr keinen) ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

IF LEN(eingabe$) < 3 THEN
    satztemp$(8) = " F" + eingabe$
   
 ELSE
GOTO 856
 END IF



CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%




END SUB

SUB satzschreiben
eingtrue% = 1
888 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14

INPUT "Waehle Zyklus bzw Befehl "; eingabe$
CALL eingzeigen
SELECT CASE eingabe$
CASE "q"
    eingtrue% = 0
    EXIT SUB
   
CASE "l"
CALL tooldef: EXIT SUB
CASE "b"
CALL Tiefbohren: EXIT SUB
CASE "g"
CALL Gewbohren: EXIT SUB
CASE "n"
CALL Nuten: EXIT SUB
CASE "d"
CALL Taschen: EXIT SUB
CASE "t"
CALL TCall: EXIT SUB
CASE "v"
CALL Vzeit: EXIT SUB
CASE "a"
satztemp$(0) = zyklen$(3)
CASE "i"
satztemp$(0) = zyklen$(4)

CASE "s"
CALL cyclstop: EXIT SUB

CASE "k"
CALL lblset: EXIT SUB

CASE "c"
CALL lblcall: EXIT SUB

CASE "w"
CALL cyclcall: EXIT SUB

CASE "m"
CALL Pol: EXIT SUB

CASE "p"
CALL polkoord: EXIT SUB

CASE ELSE  'wird falsche eingabe gemacht springe zu Anfang der Abfrage
GOTO 888
END SELECT

889 CALL eingzeigen '----------Wert Eingabe abfragen x z oder y
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB
CASE "x"
satztemp$(1) = "X"
CASE "y"
satztemp$(1) = "Y"
CASE "z"
satztemp$(1) = "Z"
CASE ELSE
GOTO 889
CALL eingzeigen
END SELECT

890 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Wert eingeben(+ bzw -eingeben!): ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

CASE ELSE: satztemp$(2) = eingabe$ + SPACE$(10 - LEN(eingabe$))

CALL eingzeigen
END SELECT

891 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "R + oder - oder 0 : ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

CASE "+"
satztemp$(3) = "R" + eingabe$
CASE "-"
satztemp$(3) = "R" + eingabe$
CASE "0"
satztemp$(3) = "R" + eingabe$
CASE ""
satztemp$(3) = "R0"

CASE ELSE: GOTO 891
CALL eingzeigen
END SELECT

892 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Vorschub F eingeben: ", eingabe$

SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB
END SELECT

IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = " F" + eingabe$ + SPACE$(5 - LEN(eingabe$))

ELSE GOTO 892
END IF

893 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "M-Befehl (leer fuer keinen): ", eingabe$

SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB
END SELECT

IF LEN(eingabe$) < 3 THEN
satztemp$(5) = " M" + eingabe$

ELSE GOTO 893
END IF


CALL satzspeichern






eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%

999 END SUB

SUB satzspeichern

CALL eingzeigen
COLOR 5, 7: LOCATE zeileeing%, 5
INPUT "Satz: ueberschreiben:u/einfuegen:e/Abbrechen:q ", eingabe$
IF eingabe$ = "" THEN eingabe$ = "e"
IF eingabe$ = "q" THEN ERASE satztemp$: EXIT SUB

SELECT CASE satztemp$(0)
        '------------Zyklen mit einem Satz speichern-----------
CASE zyklen$(2), zyklen$(3), zyklen$(4), zyklen$(8), zyklen$(13), zyklen$(14), zyklen$(15)
        IF eingabe$ = "e" THEN CALL zeiledazu
        FOR speich% = 0 TO 8
        inhalta$(zeile%, speich%) = satztemp$(speich%)
        NEXT speich%
        zeile% = zeile% + 1
        '-------------ToolDEF-Zyklus mit zwei S„tzen speichern---------
CASE zyklen$(1)
        IF eingabe$ = "e" THEN FOR leerz% = 1 TO 2: CALL zeiledazu: NEXT leerz%
        FOR erste% = 0 TO 3
        inhalta$(zeile%, erste%) = satztemp$(erste%): NEXT erste%

        inhalta$(zeile% + 1, 0) = satztemp$(0)
        inhalta$(zeile% + 1, 1) = satztemp$(1)
        inhalta$(zeile% + 1, 2) = satztemp$(4)
        inhalta$(zeile% + 1, 3) = satztemp$(5)
        zeile% = zeile% + 2
        '----------------VZeit -Zyklus mit zwei S„tzen speichern----------
CASE zyklen$(11)
        IF eingabe$ = "e" THEN FOR leerz% = 1 TO 2: CALL zeiledazu: NEXT leerz%
        FOR erste% = 0 TO 1
        inhalta$(zeile%, erste%) = satztemp$(erste%): NEXT erste%

        inhalta$(zeile% + 1, 0) = satztemp$(0)
        inhalta$(zeile% + 1, 1) = satztemp$(2)
        inhalta$(zeile% + 1, 2) = satztemp$(3)
       
        zeile% = zeile% + 2

        '----------------Zyklus(Pol) mit drei S„tzen speichern-----------
CASE zyklen$(6)
        IF eingabe$ = "e" THEN FOR leerz% = 1 TO 3: CALL zeiledazu: NEXT leerz%
       
        inhalta$(zeile%, 0) = satztemp$(0)
        inhalta$(zeile%, 1) = satztemp$(1)
       
        inhalta$(zeile% + 1, 0) = satztemp$(0)
        FOR speich% = 2 TO 4
        inhalta$(zeile% + 1, speich%) = satztemp$(speich%): NEXT speich%
       
        inhalta$(zeile% + 2, 0) = satztemp$(0)
        FOR speich2% = 1 TO 4
        inhalta$(zeile% + 2, speich2%) = satztemp$(speich2% + 4): NEXT speich2%
        zeile% = zeile% + 3

       

        '----------------Zyklus(Pol-Koordinaten) mit vier S„tzen speichern-----------
CASE zyklen$(5)
        IF eingabe$ = "e" THEN FOR leerz% = 1 TO 4: CALL zeiledazu: NEXT leerz%
     
        inhalta$(zeile%, 0) = satztemp$(0)
        inhalta$(zeile%, 1) = satztemp$(1)
     
        inhalta$(zeile% + 1, 0) = satztemp$(0)
        FOR speich% = 1 TO 2
        inhalta$(zeile% + 1, speich%) = satztemp$(speich% + 1)
        inhalta$(zeile% + 2, speich%) = satztemp$(speich% + 3)
        inhalta$(zeile% + 3, speich%) = satztemp$(speich% + 5): NEXT speich%
       
        inhalta$(zeile% + 2, 0) = satztemp$(0)
        inhalta$(zeile% + 3, 0) = satztemp$(0)
       
       
        zeile% = zeile% + 4


 

  '------------bohrzyklus --------
CASE zyklen$(7)
  IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 6: CALL zeiledazu: NEXT leerezeilen%
  FOR speich% = 0 TO 5
  inhalta$(zeile% + speich%, 0) = satztemp$(0)
  inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
  FOR rl% = 2 TO 8
  inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
  NEXT speich%

  zeile% = zeile% + 6
'-----------------Gewindebohrzyklus----------
CASE zyklen$(12)
  IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 5: CALL zeiledazu: NEXT leerezeilen%
  FOR speich% = 0 TO 4
  inhalta$(zeile% + speich%, 0) = satztemp$(0)
  inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
  FOR rl% = 2 TO 8
  inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
  NEXT speich%

  zeile% = zeile% + 5

'----------------Taschen und Nutenzyklus
CASE zyklen$(9), zyklen$(10)
  IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 7: CALL zeiledazu: NEXT leerezeilen%
  FOR speich% = 0 TO 6
  inhalta$(zeile% + speich%, 0) = satztemp$(0)
  inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
  FOR rl% = 2 TO 8
  inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
  NEXT speich%

  zeile% = zeile% + 7








END SELECT
 
 
 
 






       
ERASE satztemp$


END SUB

SUB satzspeichernalt
      '--------Werkzeugdefinition---------
500 CALL eingzeigen
COLOR 5, 7: LOCATE zeileeing%, 5
INPUT "Satz: ueberschreiben:u/einfuegen:e/Abbrechen:q ", eingabe$

IF satztemp$(0) = "TOOL DEF " AND eingabe$ = "u" THEN
  FOR ka% = 0 TO 3
  inhalta$(zeile%, ka%) = satztemp$(ka%)
  NEXT ka%
  FOR ka% = 4 TO 8
  inhalta$(zeile%, ka%) = ""
  inhalta$(zeile% + 1, ka%) = ""
  NEXT ka%
  inhalta$(zeile% + 1, 0) = "TOOL DEF ": inhalta$(zeile% + 1, 1) = satztemp$(1)
  inhalta$(zeile% + 1, 2) = "    R ": inhalta$(zeile% + 1, 3) = satztemp$(5)
ELSEIF satztemp$(0) = "TOOL DEF " AND eingabe$ = "e" THEN
inhalta$(zeile%, 0) = "TOOL DEF ": inhalta$(zeile%, 1) = satztemp$(1)
  inhalta$(zeile%, 2) = "    R ": inhalta$(zeile%, 3) = satztemp$(5)
  CALL zeiledazu
  FOR ka% = 0 TO 3
  inhalta$(zeile%, ka%) = satztemp$(ka%)
  NEXT ka%
  FOR ka% = 4 TO 8
  inhalta$(zeile%, ka%) = ""
  NEXT ka%
  zeile% = zeile% + 2


  '------------bohrzyklus --------
 ELSEIF satztemp$(0) = "CYCL DEF 1." AND eingabe$ = "u" THEN
505  FOR kc% = 0 TO 5   'schleife fr sechs S„tze Werte zuweisen
        inhalta$(zeile% + kc%, 1) = satztemp$(kc% + 1)
  NEXT kc%

 FOR kb% = 0 TO 5 'schleife fr sechs S„tze die leeren Stellen l”schen
        FOR ka% = 2 TO 8  'je Satz Stellen 2 bis 8 l”schen
        inhalta$(zeile% + kb%, ka%) = ""
        NEXT ka%
        inhalta$(zeile% + kb%, 0) = satztemp$(0)
 NEXT kb%
  zeile% = zeile% + 6
ELSEIF satztemp$(0) = "CYCL DEF 1." AND eingabe$ = "e" THEN
        FOR kd% = 1 TO 6 'Platz schaffen fr sechs Zeilen
        CALL zeiledazu
        NEXT kd%
   GOTO 505
   zeile% = zeile% + 6


ELSEIF satztemp$(0) = "TOOL DEF " AND eingabe$ = "e" THEN
inhalta$(zeile%, 0) = "TOOL DEF ": inhalta$(zeile%, 1) = satztemp$(1)
  inhalta$(zeile%, 2) = "0R": inhalta$(zeile%, 3) = satztemp$(5)
  CALL zeiledazu
  FOR ka% = 0 TO 3
  inhalta$(zeile%, ka%) = satztemp$(ka%)
  NEXT ka%
  FOR ka% = 4 TO 8
  inhalta$(zeile%, ka%) = ""
  NEXT ka%
  zeile% = zeile% + 2





   '----Zyklen mit einer Zeile abspeichern-------
ELSEIF satztemp$(0) = "TOOL CALL " OR satztemp$(0) = "A " AND eingabe$ = "u" THEN FOR zz% = 0 TO 8  _
'OR satztemp$(0) = "LBL CALL  " OR satztemp$(0) = "A " OR satztemp$(0) = "I " OR satztemp$(0) = "STOP    " OR satztemp$(0) = "Verweilzeit " OR satztemp$(0) = "LBL " OR satztemp$(0) = "CALL LBL " OR satztemp$(0) = "VERWEILZEIT " AND eingabe$ = "u" THEN FOR zz% = 0 TO 8
 inhalta$(zeile%, zz%) = satztemp$(zz%)
 NEXT zz%
 FOR yz% = 0 TO 8
 satztemp$(yz%) = ""
 NEXT yz%
 zeile% = zeile% + 1



ELSEIF eingabe$ = "q" THEN FOR yz% = 0 TO 8
 satztemp$(yz%) = ""
 NEXT yz%

END IF




EXIT SUB


CALL eingzeigen
'GOTO 599




END SUB

SUB Taschen

380 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(10)
satztemp$(1) = "0 TASCHENFRAESEN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 380
END IF


382 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$

ELSE GOTO 382
END IF

383 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG " + eingabe$
ELSE GOTO 383
END IF

384 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "1. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)
'IF LEFT$(eingabe$, 1) = "x" OR LEFT$(eingabe$, 1) = "y" OR LEFT$(eingabe$, 1) = "z" THEN
    CASE "x"
        satztemp$(5) = "4 X " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "y"
        satztemp$(5) = "4 Y " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "z"
        satztemp$(5) = "4 Z " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE ELSE
        GOTO 384
    END SELECT


385 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "2. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT

SELECT CASE LEFT$(eingabe$, 1)
'IF LEFT$(eingabe$, 1) = "x" OR LEFT$(eingabe$, 1) = "y" OR LEFT$(eingabe$, 1) = "z" THEN
    CASE "x"
        satztemp$(6) = "5 X " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "y"
        satztemp$(6) = "5 Y " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE "z"
        satztemp$(6) = "5 Z " + MID$(eingabe$, 2, LEN(eingabe$))
    CASE ELSE
        GOTO 385
    END SELECT


386 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(7) = "6 F " + eingabe$
ELSE GOTO 386
END IF



'FOR ui% = 7 TO 8
satztemp$(8) = ""
'NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%





END SUB

SUB TCall

705 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Werkzeugnummer eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 4 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(2)
satztemp$(1) = eingabe$
ELSE GOTO 705
END IF


706 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Werkzeugachse X/Y/Z eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
 
CASE "x", "1"
        satztemp$(2) = "  X "
CASE "y", "2"
        satztemp$(2) = "  Y "
CASE "z", "", "3"
        satztemp$(2) = "  Z "

CASE ELSE
        GOTO 706
   END SELECT

710 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Drehzahl eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB
CASE ELSE
satztemp$(3) = " S "
satztemp$(4) = eingabe$
END SELECT

FOR ui% = 5 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%



END SUB

SUB Tiefbohren

450 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(7)
satztemp$(1) = "0 TIEFBOHREN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 450
END IF


451 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$

ELSE GOTO 451
END IF

452 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG" + eingabe$
ELSE GOTO 452
END IF

453 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Verweilzeit eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(5) = "4 V.ZEIT " + eingabe$

ELSE GOTO 453
END IF

454 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(6) = "5    F" + eingabe$
ELSE GOTO 454
END IF



FOR ui% = 7 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%



END SUB

SUB tooldef
805 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Werkzeug Nummer eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 4 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(1)
satztemp$(1) = eingabe$ + SPACE$(6 - LEN(eingabe$))
'satztemp$(3) = eingabe$ + SPACE$(6 - LEN(eingabe$))
ELSE GOTO 805
END IF




810 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Werkzeuglaenge eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB
CASE ELSE
satztemp$(2) = SPACE$(2)
satztemp$(4) = SPACE$(2)
satztemp$(3) = "L " + eingabe$
END SELECT

820 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Werkzeug Radius eingeben : ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
    EXIT SUB

CASE ELSE: satztemp$(5) = "R " + eingabe$

END SELECT

FOR ui% = 6 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%


END SUB

SUB Vzeit

755 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Verweilzeit eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
    FOR xi% = 0 TO 8
    satztemp$(xi%) = ""
    NEXT xi%
    eingtrue% = 0
   EXIT SUB
   END SELECT
IF LEN(eingabe$) < 3 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(11)
satztemp$(1) = "0 VERWEILZEIT "
satztemp$(2) = "1 V.ZEIT "
satztemp$(3) = eingabe$

ELSE GOTO 755
END IF


FOR ui% = 4 TO 8
satztemp$(ui%) = ""
NEXT ui%


CALL satzspeichern

eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%


END SUB

SUB wkzVerw
COLOR 0, 7: CLS
DO UNTIL INKEY$ = "e"
eing$ = INKEY$
IF eing$ = "e" THEN
CALL eingzeigen
EXIT SUB
END IF
CLS
PRINT eing$
PRINT "                        WERKZEUGVERWALTUNG"
FOR a% = 1 TO 80
PRINT "=";
NEXT a%

FOR b% = 4 TO 20
        LOCATE b%, 2: PRINT CHR$(179); "T"; b% - 3;
        LOCATE b%, 7: PRINT CHR$(186);
NEXT b%


LOCATE 23, 2: COLOR 0, 6: PRINT "   E"
LOCATE 24, 2: COLOR 0, 7
PRINT "HAUPTMENš"
SLEEP
'IF eing$ = "e" THEN EXIT SUB
LOOP
END SUB

SUB zeiledazu
CLS
FOR bb% = 800 TO zeile% STEP -1

 FOR bc% = 0 TO 8
 inhalta$(bb% + 1, bc%) = inhalta$(bb%, bc%)
 NEXT bc%
 FOR bd% = 0 TO 8
 inhalta$(bb%, bd%) = ""
 NEXT bd%
 NEXT bb%


END SUB

SUB zeileweg
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 27.12.2020, 22:49    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
...steht man vor dem Problem dass man zwar Satz für Satz einliest aber man beim Einlesen NICHT weiß wie der Satz formatiert ist und somit die Trennung der einzelnen Satzteile total aufwändig wird...

...Die einzelne Sätze beim Einlesen aus der Datei werde ich wohl anhand des ersten Buchstaben je Zeile unterscheiden und dann mit Programmverzweigungen entsprechen den Satz richtig formatiert in das Array einlesen

Warum so kompliziert? Sieh dir mal den Stringparser aus meinem Codebeispiel an, hier auf QB umgeschrieben (und ich bleibe dabei: der QB-Editor ist eine Zumutung mit dem Kopf durch die Mauer wollen ). Statt für jede denkbare Variante eine eigene Programmverzweigung zu schreiben ist es viel einfacher, den Satz auf eine Normalform zu bringen, in der er sich leicht zerlegen lässt. Danach kannst du dann die einzelnen Elemente der Zeile bequem weiterverarbeiten:
Code:
DATA "25 TOOL DEF 33      L +265,600"
DATA "26 TOOL DEF 33      R +13,875"
DATA "29 A Z+270,000  R0 F1000  M5"
DATA "*"

   'zerlegt eine textzeile
       ' Dim As Integer anfang, ende, x
       ' Dim As String z
   
DO
   READ z$
   PRINT z$
   PRINT "---"
   IF z$ = "*" THEN
      EXIT DO
   END IF
   
   'string fr den parser aufbereiten
   z$ = z$ + " " 'leerzeichen anhängen
   
   Do While InStr(z$, "  ") 'mehrfache leerzeichen entfernen
      anfang% = InStr(z$, "  ")
      z$ = LEFT$(z$, anfang% - 1) + Mid$(z$, anfang% + 1)
   Loop
         
   FOR x% = 1 TO LEN(z$) 'ein leerzeichen vor jedes pluszeichen setzen
      IF MID$(z$, x%, 1) = "+" THEN
         IF MID$(z$, x% - 1, 1) <> " " THEN
            z$ = LEFT$(z$, x% - 1) + " " + MID$(z$, x%)
         END IF
      END IF
   NEXT
   
   FOR x% = 1 TO LEN(z$) 'ein leerzeichen vor jedes minuszeichen setzen
      IF MID$(z$, x%, 1) = "-" THEN
         IF MID$(z$, x% - 1, 1) <> " " THEN
            z$ = LEFT$(z$, x% - 1) + " " + MID$(z$, x%)
         END IF
      END IF
   NEXT
         
   anfang% = 1
   DO 'string auswerten
      ende% = INSTR(anfang%, z$, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
      IF ende% = 0 THEN 'kein weiterer parameter vorhanden
         EXIT DO 'schleife verlassen
      ELSE
         PRINT MID$(z$, anfang%, ende% - anfang%) 'parameter isoliern und in array schreiben
      END IF
      anfang% = ende% + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
   LOOP
   PRINT
   PRINT "----------------------"
   PRINT
   SLEEP
LOOP

SLEEP


Im übrigen schliesse ich mich dreael an: Niemand wird dich hier schief ansehen, wenn du kein IT - Experte oder Computernerd bist. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!


Zuletzt bearbeitet von grindstone am 27.12.2020, 23:45, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 27.12.2020, 23:20    Titel: Antworten mit Zitat

Um das Auszählen der Leerzeichen der verschiedenen Sätze komme ich nicht drum rum da ich die Sätze ja exakt nach dem Muster wieder zusammen setzen muss.
Ob dein Vorschlag funktioniert muss ich mal gucken, es gibt ja 14 verschiedene Zyklen welche diese unterschiedlichen CNC-Sätze erzeugen - manche werden eben in einer Zeile abgespeichert - andere werden in mehrere Zeilen abgespeichert. Das macht es alles so kompliziert zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 27.12.2020, 23:58    Titel: Antworten mit Zitat

OK, ich sehe, was du meinst. Das Entfernen mehrfacher Leerzeichen ist keine große Sache, ich habe den Programmschnippsel oben entsprechend erweitert.

Das erneute Zusammensetzen der Zeilen dürfte doch kein Problem sein, da dein Programm das schon kann, wenn du die einzelnen Elemente entsprechend in das Array schreibst.

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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 28.12.2020, 00:50    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:

Das erneute Zusammensetzen der Zeilen dürfte doch kein Problem sein, da dein Programm das schon kann, wenn du die einzelnen Elemente entsprechend in das Array schreibst.

Gruß
grindstone


Du hast zwar recht aber so wie ich mein Programm gemacht habe geht das nur wenn die Daten vom Nutzer eingegeben wurden. Wenn die jetzt Satzweise eingelesen werden aus der Datei geht das nicht so einfach...da muss ich mir noch was ausdenken.

Aber Danke schonmal für deine Hilfestellung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 28.12.2020, 13:29    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
Du hast zwar recht aber so wie ich mein Programm gemacht habe geht das nur wenn die Daten vom Nutzer eingegeben wurden.

Das ist doch recht einfach zu erweitern. Der günstigste Ansatzpunkt scheint mir satztemp$ zu sein. Nach der manuellen Eingabe stehen die ganzen Werte dort drin und gelangen dann in das "große" Array inhalta$, aus dem dann die Ausgabedatei generiert wird. Man braucht also einfach nur die Sätze aus der externen Datei in das satztemp$-Format zurückübersetzen und kann damit arbeiten, als ob man es von Hand eingegeben hätte.

Als kleine Demonstration hab ich mal für die ersten beiden Zyklen einen Übersetzer geschrieben, den du in dein Programm einfügen kannst (du siehst schon, wo). Er hat noch keine wirkliche Funktion, es geht erst einmal nur ums Übersetzen:
Code:
...
Sub lblset
   Cls
   Color 9, 7
   Print "-------------"
   Print "N"; ""; "N"
   Print "N"; " "; "N"
   Print "__________"
   Sleep
End Sub


Dim Shared parse$(1 To 10)
Dim Shared pa$

Sub parser
   
   For pindex% = LBound(parse$) To UBound(parse$)
      parse$(pindex%) = ""
   Next
      
   'string für den parser aufbereiten
   pa$ = pa$ + " " 'leerzeichen anhängen
   
   Do While InStr(pa$, "  ") 'mehrfache leerzeichen entfernen
      anfang% = InStr(pa$, "  ")
      pa$ = LEFT$(pa$, anfang% - 1) + Mid$(pa$, anfang% + 1)
   Loop
         
   FOR pindex% = 1 TO LEN(pa$) 'ein leerzeichen vor jedes pluszeichen setzen
      IF MID$(pa$, pindex%, 1) = "+" THEN
         IF MID$(pa$, pindex% - 1, 1) <> " " THEN
            pa$ = LEFT$(pa$, pindex% - 1) + " " + MID$(pa$, pindex%)
         END IF
      END IF
   NEXT
   
   FOR x% = 1 TO LEN(pa$) 'ein leerzeichen vor jedes minuszeichen setzen
      IF MID$(pa$, pindex%, 1) = "-" THEN
         IF MID$(pa$, pindex% - 1, 1) <> " " THEN
            pa$ = LEFT$(pa$, pindex% - 1) + " " + MID$(pa$, pindex%)
         END IF
      END IF
   NEXT
         
   anfang% = 1
   pindex% = 1
   DO 'string auswerten
      ende% = INSTR(anfang%, pa$, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
      IF ende% = 0 THEN 'kein weiterer parameter vorhanden
         EXIT DO 'schleife verlassen
      ELSE
         parse$(pindex%) = MID$(pa$, anfang%, ende% - anfang%) 'parameter isoliern und in array schreiben
         pindex% = pindex% + 1
      END IF
      anfang% = ende% + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
   Loop
   
End Sub

Sub menu2
Do Until eing$ = "e"
   eing$ = Inkey$
   Color 0, 7: Cls
   Locate 2, 3: Color 15, 5
   Print "Speichern(S) ™ffnen(O) Laufwerk ausw„hlen(L) Hauptmen"
   Print "-----------------------------------------------------------------"
   Color 6, 7: Print "abcedne”ljha”oj"
   If eing$ = "s" Then GoSub 1200
   'chdir
   Sleep
Loop
GoTo 2000
'SLEEP
'END

'zyklen$(1) = "TOOL DEF " '2 zeilen
'zyklen$(2) = "TOOL CALL" '1 zeile
'zyklen$(3) = "A " '1 zeile
'zyklen$(4) = "I " '1 zeile
'zyklen$(5) = "CYCL DEF 5." '4 zeilen
'zyklen$(6) = "CYCL DEF 6." '3 zeilen
'zyklen$(7) = "CYCL DEF 1." '6 zeilen
'zyklen$(8) = "STOP " '1 zeile
'zyklen$(9) = "CYCL DEF 3." '7 zeilen
'zyklen$(10) = "CYCL DEF 4." '7 zeilen
'zyklen$(11) = "CYCL DEF 9." '2 zeilen
'zyklen$(12) = "CYCL DEF 2." '4 zeilen
'zyklen$(13) = "LBL "
'zyklen$(14) = "CALL LBL " '1 zeile


'--------------Sätze aus Datei holen-----------------

1100 OPEN "cncprg.txt" FOR INPUT AS #2
Cls

Do
   Line Input #2, g$ 'satz holen
   For x% = LBound(zyklen$) To UBound(zyklen$) 'zykluskennung ermitteln
      a% = InStr(g$, zyklen$(x%))
      If a% <> 0 Then 'kennung gefunden, suche abbrechen
         Exit For
      EndIf
   Next
   
   Select Case x% 'nummer des zyklus
      Case 1 'TOOL DEF
         satztemp$(0) = zyklen$(x%) 'zykluskennung
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%) 'text nach der zykluskennung an parser übergeben
         Call parser
         satztemp$(1) = parse$(1) 'werkzeugnummer
         satztemp$(3) = parse$(2) + " " + parse$(3) 'L xxx
         
         Line Input #2, g$ 'zweite zeile holen
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(5) = parse$(2) + " " + parse$(3) 'R xxx
      Case 2 'TOOL CALL
         satztemp$(0) = zyklen$(x%)
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%) 'text nach der zykluskennung an parser übergeben
         Call parser
         satztemp$(1) = parse$(1) 'werkzeugnummer
         satztemp$(2) = " " + parse$(2) 'achse
         satztemp$(3) = " " + parse$(3)
         satztemp$(4) = parse$(4) 'drehzahl
      Case 3 'A
         '...
         
            
   End Select
   
Loop

Close #2
Return




'--------------S„tze in Datei schreiben und speichern-------
1200 Open "cncprg.txt" For Output As #1
For ausg% = 1 To 800
Print 1#, ausg%;
Print ausg%;
For acht% = 0 To 7
   Print #1, inhalta$(ausg%, acht%); ' : NEXT acht%
   Print inhalta$(ausg%, acht%); : Next acht%
   Print #1, inhalta$(ausg%, 8)
   Print inhalta$(ausg%, 8)
Next ausg%

Close #1
Return
...

Wenn du willst, kann ich die Routinen für die restlichen Zyklen auch noch schreiben, wenn man den Anfang (und ein paar Hilfsroutinen) einmal hat, ist das kein allzu großer Aufwand. Nur mit LBL kann ich nichts anfangen, da spielt das Programm irgendwie verrückt.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!


Zuletzt bearbeitet von grindstone am 30.12.2020, 13:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 14

BeitragVerfasst am: 28.12.2020, 19:07    Titel: Antworten mit Zitat

Die Sub "lblset" ist von mir noch nicht erstellt - das was da drin steht war nur ein Test grinsen also einfach ignorieren


grindstone hat Folgendes geschrieben:

Das ist doch recht einfach zu erweitern. Der günstigste Ansatzpunkt scheint mir satztemp$ zu sein. Nach der manuellen Eingabe stehen die ganzen Werte dort drin und gelangen dann in das "große" Array inhalta$, aus dem dann die Ausgabedatei generiert wird. Man braucht also einfach nur die Sätze aus der externen Datei in das satztemp$-Format zurückübersetzen und kann damit arbeiten, als ob man es von Hand eingegeben hätte.



Gruß
grindstone


Ja so war mein erster Gedanke allerdings: Manche Zyklen werden beim Umschreiben von satztemp$ zu inhalta$ auf MEHRERE Zeilen verteilt
Lese ich jetzt von der Datei ein müsste ich so einen Zyklus aus mehreren Zeilen ja auch als Block einlesen um ihn in satztemp$ zu bekommen.

Habe jetzt aber eine Lösung wie ich das ganze Relativ einfach hin bekomme mit Select-Case: Ich Lese jede Zeile einzeln ein und die ersten beiden Strings werden ausgewertet - mit diesen kann ich alle 15 verschiedenen Zyklen unterscheiden und dann direkt in die inhalta$-Variable rein schreiben. Da manche Zyklen den gleiche Satzformatierung haben ist der Aufwand sehr überschaubar.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

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

Ein anderer Artikel aus meiner früheren Sammlung:

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

Dies als Anregung, falls das Ziel ein komfortabler CNC-Programmeditor sein soll. Würde hier Sinn machen, damit man sich z.B. per Pfeiltasten im Programm bewegen kann, um nachträglich ein beliebiger Satz ändern zu können.

Ansonsten Danke fürs Code posten. Tipp von mir (und anderen auch): Ich würde nach Möglichkeit sämtliche GOTOs eliminieren, d.h. von A bis Z strukturiert arbeiten, so dass schlussendlich auch die Einrückungen stimmen.

Ansonsten, wenn ich so eine CNC-Software bauen müsste, so würde mich die Syntax in einer Form wie EBNF als erstes interessieren.

Sieht dann ungefähr hier so aus (nicht komplett!):
Code:

CNCProgramm = Zeile { Zeile } ;
Zeile = Satznummer Whitespace Befehl1 Whitespace Befehl2 Whitespace Argumente "<CR><LF>";
Satznummer = Ziffer { Ziffer } ;
Ziffer = "0" | "1" | "2" ... "9" ;
Whitespace = " " { " " };
Befehl1 = "TOOL" | "CYCL" ;
Befehl2 = "DEF" | "CALL" ;


In ungefähr einer solchen Form würde ich die Befehlssprache der Maschine einmal dokumentieren/darstellen (oder im Idealfall gibt es so etwas vom Maschinenhersteller selber bereits). => Auf Basis dieser Definition lässt sich dann der gewünschte Eingabeeditor entwickeln.
_________________
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 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