CodeConverter

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

5k41

Betreff: CodeConverter

BeitragSa, Mai 06, 2006 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich habe vorhin auf einen Thread in der BC einen kleinen Codeconverter geschrieben, aber nun habe ich das Problem das ich nur BlitzBasic und C++ kann und somit mir der Codeconverter nicht so viel nützt, da die Sprachen recht wenig gemeinsam haben. Ich dachte vielleicht das einer Lust hat ihn ein bisschen mit qb oder pb befehlen zu erweitern... hier ist der momentane Code:
Code: [AUSKLAPPEN]

AppTitle "CodeConverter"

iname$=Input("Input:")
oname$=Input("Output:")
If FileType(iname$)=1 Then
 inp=OpenFile(iname$)
Else
 RuntimeError "Input-File existiert nicht!
EndIf
If FileType(oname$)=1 Then
 oup=WriteFile(oname$)
Else
 RuntimeError "Outoupt-File existiert nicht!"
EndIf

Repeat

 lin$=ReadLine(inp)
 in=whiteSpace(lin$);letztes Leerzeichen ermitteln vor dem ersten buchstaben ermitteln
 If in<>0 Then
  leer$=Left(lin$,in)
  befehl$=Mid(lin$,in+1,Len(lin))
 Else
  leer$=""
  befehl$=lin
 EndIf
 

 If Left(befehl$,4)="txt(" Then
  WriteLine oup,leer+"Text "+stringSplitt(stringSplitt(befehl,"(",1),")",0)
 ;hier können neue Befehle per ElseIf reingehauen werden (und natürlich meiner entfernt werden ;-))

 Else
  WriteLine oup,lin
 EndIf

Until(Eof(inp))

RuntimeError "Fertig!"

;Functions-------------------------------------------------------------------------------------------------------------------

;SPLITTS A STRING AT THE CHAR

Function stringSplitt$(strg$,char$,selection%)

 Local newstrg$=""
 Local count%=0

 If Instr(strg$,char$)>0 Then

  For i%=1 To Len(strg$)
 
   If Mid(strg$,i%,1)=char$ Then count%=count%+1:i=i+1

   If count%=selection% Then newstrg$=newstrg$+Mid(strg,i%,1)
   If count%>selection% Then Exit

  Next

 Else
  newstrg$=strg$
 EndIf

 Return newstrg$

End Function

;FINDS THE LAST WHITESPACE INFRONT OF A LETER IN A STRING

Function whiteSpace(strg$)

 For i=1 To Len(strg$)

  If Mid(strg,i,1)<> " " Then Return lst
  If Mid(strg,i,1)=" " Then lst=i

 Next

 Return lst

End Function

und hier nochmal eine Datei, welche ich immer zum testen convertiert hab:
test.qb hat Folgendes geschrieben:

txt(0,0, " Hallo!")
huhu
sadasd
txt(10 ,20 ,"fdas sdlk ")´

sry ich hab wirklich keine ahnung von qb desshalb der Fantasie-Befehl^^

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

BladeRunner

Moderator

BeitragSa, Mai 06, 2006 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.


Ins Codearchiv bitte nur vollständige Sachen, kein WiP.
Viel Erfolg mit dem Converter.

Gruß BladeRunner
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

MoM007

BeitragSa, Mai 06, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir können uns ja zusammentun, ich will auch einen schreiben, ich hab auch schon einen Tread gemacht:

https://www.blitzforum.de/foru...hp?t=17872

Ich kenn mich aber nur sehr dürftig mit QBasic aus, muss dann wohl ein paar Bücher lesen Sad *kein bock haben*

MfG MoM007[/url]
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

Kryan

BeitragSa, Mai 06, 2006 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ich könnte euch mit bisschen fachwissen bezüglich qbasic dienen Very Happy

so weiß ich wie double-buffering und sowas geht Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

MoM007

BeitragSa, Mai 06, 2006 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Kryan hat Folgendes geschrieben:
so weiß ich wie double-buffering und sowas geht Wink

Das wird wohl nciht nötig sein, aber ich komm drauf zurück Wink

PS: wir können ja ein Projekt daraus machen, wenn sich genügend Leute melden die bock darauf haben.

Kryan

BeitragSa, Mai 06, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso wird es nicht nötig sein??

wollt ihr etwa kein Flip und kein BackBuffer() und soweiter verwenden??

ich hoffe mal, dass das sich nicht so in deinen projekten verhält Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

MoM007

BeitragSa, Mai 06, 2006 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie es bei 5k41 aussieht, weiß ich nicht, aber ich brauch das nicht, bie Qbaisc ist das ja auch nicht so gefragt, gibt ja so gut wie keine grafik, oder?
Aber wenn ich mal so drüber nachdenke würde mich das schon mal interessieren wie das in Qbasic aussieht, kannst ja mal Beispiele posten.

MfG MoM007
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

5k41

BeitragSa, Mai 06, 2006 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
erstmal: sry wegen Codearchiv! Ich dachte das das was fürs archiv ist, da es zeigt wie man einen Converter schrieben könnte... egal!

@Momo
h3h3 momo du bist cool! ich hab doch das dingen nur wegen dir geschrieben! Ich brauch sowas eigentlich garnicht, aber du hast mir irgendwie den anreiz gegeben und ich wollt sehn ob ich das hinbekomme!^^
@Kryan
Ich hab kein Problem damit wenn du den CodeConverter für QB ausbaust! Im gegenteil! Ich wär sogar froh! Ich hab den Converter wie schon gesacht nur wegen Momo geshcrieben von daher könnt ihr damit machen was ihr wollt... ich wär nur froh wenn ihr den erweiterten Converter dann hier posten würdet Smile

MfG

~Edit~
Momo ja du hast den richtigen angeschrieben... leider spackt ICQ im moment... schreib mich bitte demnächst nochmal an Wink
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Kryan

BeitragSo, Mai 07, 2006 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@momo: in qbasic gibt es grafiken, man muss nur wissen wie das geht
mit den befehlen bsave und bload kann man so ein array einlesen oder speichern
guckt man sich die hilfe zu diesen funktionen an, so erkennt man, wie man etwas was auf dem bildschirm ist, in ein array reinbekommt oder auch andersrum

leider geht es nicht mit .bmp-dateien oder gar .jpg .png etc.
so muss man sich dann in einer anderen sprache (zB blitzbasic) einen bilder-konverter basteln

für kleine 2d-spiele ohne aufwendigen sound (jaja...guckt euch mal die sound-anweisung bei qbasic an) kann man qbasic benutzen, was einem sogar aktzeptable geschwindigkeit bietet, sofern man double-buffering anwendet (dazu mal PCOPY und SCREEN anschauen)
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

MoM007

BeitragSo, Mai 07, 2006 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kryan: Du kannst ja mal in den Code von 5k41 das reinschreiben, was du weißt, wäre echt nett, weil ein converter der nicht alles kann isr echt doof.
5k41 erklärt mir noch wie es geht und dann schreib ich ihn alleine weiter, aber wenn du das machen würdestes fänd ich echt nett.

MfG MoM007

@Kryan + @5k41

heißt MoM007!

danke
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

5k41

BeitragSo, Mai 07, 2006 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@MoM:
sollte hja danke ICQ geklärt sein... machen das ja nun zusammen Wink

@Kryan:
Lass das mal über ICQ besprechen... dann kann ich das alles in den Converter einbauen Wink

@All:
Ich schreib den Converter nun für QB soweit wie ich komme... werde zwischendurch mal ein paar WIPS poste, aber da ich weiss das ich ihn niemals ganz fertig bekommen würde (ohne QB Kenntnisse auch schwer) werde ich irgenwann eine Version posten, die ich nicht mehr weitermachen werde! Erst dann empfehle ich den Code zu ändern oder zu erweitern, da ich bis dahin noch ein paar veränderungen usw. vornehmen werde, die das Programmieren leichter machen.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Kryan

BeitragMo, Mai 08, 2006 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
@Momo: Momo zu schreiben ist einfacher als MoM007 oder wie auch immer...

@5k41: Ja gut, also ich werde dich darin unterstützen
dann kannst ja auch mal bisschen qbasic lernen Smile
aber du darfst nicht damit aufhören!!
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

5k41

BeitragDo, Mai 11, 2006 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu!!!!!
Die neue Version ist da!! (nicht das ihr denkt, das es hier nicht weiter geht Wink )

Features:
- REM und ' eingebaut
- INPUT "Hallo";string$ sowie INPUT "HUHU",string$ (sowie input mit allen anderen Datentypen eingebaut)
-Select Case -> Select
-Case Else -> Default

ausserdem ist das komplette gerüst fertig, heißt das es ab jetzt nur noch um den Fleiß geht alle Befehle einzubauen, aber das sollte machbar sein!

hier der code:

Code: [AUSKLAPPEN]

SetBuffer BackBuffer()
AppTitle "CodeConverter"

iname$=Input("Input:")
oname$=Input("Output:")

Type Tstrng
 Field strg$
End Type

If FileType(iname$)=1 Then
 inp=OpenFile(iname$)
Else
 RuntimeError "Input-File existiert nicht!
EndIf

oup=WriteFile(oname$)

Repeat

 lin$=ReadLine(inp)
;string in formatierungsleerzeichen und befehle aufteilen:
 in=whiteSpace(lin$)
 If in<>0 Then
  leer$=Left(lin$,in)
  befehl$=Mid(lin$,in+1,Len(lin))
 Else
  leer$=""
  befehl$=lin
 EndIf

 oldbefehl$=befehl$

 ;Damit wenn nur ein kommentar in der Zeile steht das prüfen wegfällt:

 rem=sInstr(befehl$,"REM")
 haken=sInstr(befehl$,"'")

 If rem=0   Then rem  = Len(leer)+2
 If haken=0 Then haken= Len(leer)+2

 If rem>Len(leer)+1 Or haken>Len(leer)+1 Then

  ;Nur wirklichen Befehl extrahieren:

  If Instr(befehl$,"REM")<>0   Then befehl$=stringSplitt(befehl$,"REM",0)
  If Instr(befehl$,"'")  <>0   Then befehl$=stringSplitt(befehl$,"'",0)

  oldbefehl2$=befehl$

  Repeat ;Damit falls ein Doppelpunkt in der Zeile ist das ganze wiederholt wird!

  ;nur einen Befehl rausschneiden (wegen ":") :

  befehl$=stringSplitt(oldbefehl2$,":",counter)
  If sInstr(befehl$,":")<>0 Then befehl=stringSplitt(befehl,":",counter-1)
  oldbefehl3$=befehl$

  If counter>0 Then strg$=strg$+":"

  ;Strings aus dem Befehl extrahieren:   

   Repeat
 
    ins=Instr(befehl$,Chr(34))
    If ins<>0 Then
     strng.Tstrng=New Tstrng
     strng\strg$=Right(befehl$,Len(befehl$)-ins)
     If stringSplitt(strng\strg$,Chr(34),1)<>"" Then
      strng\strg$=stringSplitt(strng\strg$,Chr(34),0)
     EndIf
     If Len(befehl$)-ins-1-Len(strng\strg$)>0 Then
      befehl$=Left(befehl$,ins-1)+Right(befehl$,Len(befehl$)-ins-1-Len(strng\strg$))
     Else
      befehl$=Left(befehl$,ins-1)
     EndIf
    EndIf

   Until(ins=0)

  ;Alle Whitespaces in dem Befehl entfernen:
 
   befehl$=Replace(befehl$," ","")

   ;Befehle von QB gegen die von BB ersetzen:

   If Upper(Left(befehl$,5))="INPUT" Then ;Input Routine
    strng.Tstrng=First Tstrng
    If Instr(befehl$,";")<>0 Then
    If Instr(befehl$,"%")<>0 Or Instr(befehl$,"&")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,";",1)+"=Int(Input("+Chr(34)+strng\strg$+"?"+Chr(34)+"))"
    ElseIf Instr(befehl$,"#")<>0 Or Instr(befehl$,"!")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,";",1)+"=Float(Input("+Chr(34)+strng\strg$+"?"+Chr(34)+"))"
    ElseIf Instr(befehl$,"$")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,";",1)+"=Input("+Chr(34)+strng\strg$+"?"+Chr(34)+")"
    Else
      strg$=strg$+leer+stringSplitt(befehl$,";",1)+"$=Input("+Chr(34)+strng\strg$+"?"+Chr(34)+")"
     EndIf
    ElseIf Instr(befehl$,",")<>0 Then
     If Instr(befehl$,"%")<>0 Or Instr(befehl$,"&")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,",",1)+"=Int(Input("+Chr(34)+strng\strg$+Chr(34)+"))"
    ElseIf Instr(befehl$,"#")<>0 Or Instr(befehl$,"!")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,",",1)+"=Float(Input("+Chr(34)+strng\strg$+Chr(34)+"))"
    ElseIf Instr(befehl$,"$")<>0 Then
     strg$=strg$+leer+stringSplitt(befehl$,",",1)+"=Input("+Chr(34)+strng\strg$+Chr(34)+")"
    Else
      strg$=strg$+leer+stringSplitt(befehl$,",",1)+"$=Input("+Chr(34)+strng\strg$+Chr(34)+")"
     EndIf
    EndIf
 
   ElseIf Upper(Left(befehl$,10))="SELECTCASE" Then
    strg$=strg$+leer+"Select "+stringSplitt(befehl$,"SELECTCASE",1)

   ElseIf Upper(Left(befehl$,8))="CASEELSE" Then
    strg$=strg$+leer+"Default "+stringSplitt(befehl$,"CASEELSE",1)

   Else
    strg$=strg$+leer+oldbefehl3$
   EndIf

   ;long und single in int und float verwandeln: (funktioniert nur leider auch in Strings...-.-)

   strg$=sReplace(strg$,"&","%")
   strg$=sReplace(strg$,"!","#")
   strg$=sReplace(strg$,";","+")

   ;(Länge aller Strings speichern und) types löschen:

   For strng.Tstrng=Each Tstrng
    ;If strg$<>oldbefehl2 Then laenge=laenge+Len(strng\strg$)
    Delete strng.Tstrng
   Next

   counter=counter+1

  Until(stringSplitt(oldbefehl2$,":",counter)="")

 ;Alle Kommentare wieder anfügen:

  If Len(oldbefehl$)-Len(oldbefehl2$)>0 Then strg$=strg$+Right(oldbefehl$,(Len(oldbefehl$)-Len(oldbefehl2$)))

 Else
  strg$=lin$
 EndIf

 ;Kommentar Symbole von QB gegen die von BB ersetzen:

 strg$=sReplace(strg$,"REM ",";")
 strg$=sReplace(strg$,"'",";")

 ;Neuen Befehl in die .bb datei schreiben:

 WriteLine oup,strg$

 strg$=""
 counter=0

 c=c+1

 Text 0,0,c
 Flip
 Cls

Until(Eof(inp))

CloseFile(inp)
CloseFile(oup)

RuntimeError "Fertig!"

;Functions-------------------------------------------------------------------------------------------------------------------

;SPLITTS A STRING AT THE CHAR

Function stringSplitt$(strg$,char$,selection%)

 Local newstrg$=""
 Local count%=0
 Local charlength=Len(char$)

 If sInstr(strg$,char$)>0 Then

  For i%=1 To Len(strg$)
 
   If Mid(strg$,i%,charlength)=char$ Then count%=count%+1:i=i+charlength

   If count%>selection%    Then Exit
   If count%=selection%    Then newstrg$=newstrg$+Mid(strg,i%,1)

  Next

 Else
  If selection=0  Then newstrg$=strg$
  If selection>0  Then newstrg$=""
 EndIf

 Return newstrg$

End Function

;EQUAL TO REPLACE

Function sReplace$(strg$,char$,nchar$)

 Local nstrg$=""
 Local charlength=Len(char$)

 If sInstr(strg$,char$)<>0 Then
 
  For i=1 To Len(strg$)

   If Mid(strg$,i,charlength)=char$ Then
    nstrg$=nstrg$+nchar$:i=i+charlength-1
   Else
    nstrg$=nstrg$+Mid(strg,i,1)
   EndIf

  Next

 Else
  nstrg$=strg$
 EndIf

 Return nstrg

End Function

;EGUAL TO INSTR

Function sInstr(strg$,char$)

 Local charlength=Len(char$)

 For i=1 To Len(strg$)

  If Mid(strg$,i,1)=Chr(34) And char<>Chr(34) Then in=1-in
  If Mid(strg$,i,charlength)=char$ And in=0   Then Return i

 Next

End Function

;FINDS THE LAST WHITESPACE INFRONT OF A LETER IN A STRING

Function whiteSpace(strg$)

 For i=1 To Len(strg$)

  If Mid(strg,i,1)<> " " Then Return lst
  If Mid(strg,i,1)=" " Then lst=i

 Next

 Return lst

End Function


denke es werden noch einige sachen verändert... aber das ist erstmal das gerüst!

MfG

~Edit~
hier noch mal ein bisschen test-code:
a.qb hat Folgendes geschrieben:

REM Das ist ein Testprogramm von Jan
'das ist nochmal ein anderes Kommentar!
INPUT "blabla";string$ REM hier speichere ich einen Wert in string!
INPUT "Zahl:";zahl& REM hier speihcer ich ne Zahl in nem Long
INPUT "Zahl2:";zahl2% 'hier speihcer ich ne Zahl in nem Int
INPUT "Zahl3:";zahl3#REM hier speicher ich ne Zahl in nem Double
INPUT "Zahl4:";zahl4!REM hier speihcer ich ne Zahl in nem Single

b.qb hat Folgendes geschrieben:

gut$="gut ?"
schlecht$="schlecht?"
Print "Hallo, wie gehts denn so?"; gut$; schlecht$

c.qb hat Folgendes geschrieben:

CLS
INPUT "Wie ist Dein Name ?"; name$
INPUT "Wie ist das Wetter heute? (gut), oder (schlecht) "; wetter$
'
IF wetter$ = "gut" THEN text$ = ", dann gehen Sie lieber raus an die Luft!"
'
IF wetter$ = "schlecht" THEN text$ = ", dann bleiben Sie lieber hier!"
PRINT "Ok, "; name$; text$

d.qb hat Folgendes geschrieben:

REM Das ist ein : Test Programm
'Cool oder?
INPUT "BlaBlaBla";string$:INPUT "Huhu!!";zahl% REM Ob ichs wohl hinbekomme?
Print string$;zahl%

e.qb hat Folgendes geschrieben:

REM hallo
REM hallo

CLS
INPUT "Gib deine Note ein (1...6):";Note%
SELECT CASE Note%
CASE 1: PRINT "sehr gut"
CASE 2: PRINT "gut"
CASE 3: PRINT "befriedgend"
CASE 4: PRINT "ausreichend"
CASE 5: PRINT "mangelhaft"
CASE 6
PRINT "ungenuegend"
PRINT "Die Versetzung ist gefaehrdet!!!"
CASE ELSE: PRINT "Diese Note gibt es nicht."
END SELECT

f.qb hat Folgendes geschrieben:

Print "Hallo du pREMier Minister"


P.S.: All mein Q-Basic "Fachwissen" beziehe ich nur durch MoM007 (dafür bin ich ihm auch sehr dankbar) desshalb bitte nicht über fehler oder komplett falsche befehle oder besser falsche Interpretationen Wink nach BlitzBasic lachen sondern lieber einen "Bug-Report" posten!
Danke!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
  • Zuletzt bearbeitet von 5k41 am Do, Mai 11, 2006 17:58, insgesamt 6-mal bearbeitet

Kryan

BeitragDo, Mai 11, 2006 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
nur mal ne frage (hab den code nicht probiert):

wenn man schreibt:

hallo$="HALLO DU PREMIERE-MINISTER!"

wird es dann auch als Kommentar gegolten oder nicht?
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

5k41

BeitragDo, Mai 11, 2006 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
oh stimmt sry! im falle rem und ' hab ich vergessen meine "eigene" Instr zu benutzten! wird sofort geändert!

Danke!

MfG

~Edit~
Code oben editiert und eine Testdatei (f.qb) hinzugefügt!

~Edit2~
Gleiches Problem nochmal behoben, da ich es eben nur bei der Prüfung, nicht aber bei der ersetztung geändert hatte
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group