  | 
					
						Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!   
						
						
					 | 
				 
			 
			 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 25.12.2020, 15:34    Titel: Unterschiedlichen Satzaufbau speziell formatiert darstellen | 
				     | 
			 
			
				
  | 
			 
			
				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   
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 26.12.2020, 01:53    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo derampcsitzt, willkommen im Forum und frohe Weihnachten!   
 
 
Meine CNC - Kenntnisse sind -zumindest was den Industriestandard angeht- zwar recht rudimentär (nennen wir es mal ein fundiertes Halbwissen    ), 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...   ) 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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 26.12.2020, 15:39    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Uffff hallo    
 
 
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   
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 26.12.2020, 17:18    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		dreael Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 2531 Wohnort: Hofen SH (Schweiz)
  | 
		
			
				 Verfasst am: 26.12.2020, 18:24    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 26.12.2020, 20:53    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 26.12.2020, 23:37    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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.  
 
 
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.  
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 27.12.2020, 00:08    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Danke für die Hilfe, werde aber wohl bei QuickBasic bleiben. Ich mag die alte Technik und arbeite damit an meinen alten Pentium-Rechnern   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    
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 27.12.2020, 01:59    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Bin jetzt grade dabei meine Formatierung zu überarbeiten (Habe den Befehl "Space$(...)" Entdeckt    )
 
 
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...   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		dreael Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 2531 Wohnort: Hofen SH (Schweiz)
  | 
		
			
				 Verfasst am: 27.12.2020, 19:45    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 27.12.2020, 21:37    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Den Quellcode kann ich ja hier nicht einfach so reinstellen und die Datei hochladen geht ja auch nicht hier... | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Sebastian Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
  | 
		
			
				 Verfasst am: 27.12.2020, 22:04    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 _________________
  
 
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 27.12.2020, 22:40    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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   
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 27.12.2020, 22:49    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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     ). 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.    
 
 
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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 27.12.2020, 23:20    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 27.12.2020, 23:58    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 28.12.2020, 00:50    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 28.12.2020, 13:29    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		derampcsitzt
 
 
  Anmeldungsdatum: 25.12.2020 Beiträge: 14
 
  | 
		
			
				 Verfasst am: 28.12.2020, 19:07    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Die Sub "lblset" ist von mir noch nicht erstellt - das was da drin steht war nur ein Test   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 | 
		 | 
	 
	
		  | 
	 
	
		dreael Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 2531 Wohnort: Hofen SH (Schweiz)
  | 
		
			
				 Verfasst am: 28.12.2020, 22:12    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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.
  | 
   
 
     |