Fonte/ Codesnippets | | | | - Page 1 - |
| Jörg Sellmeyer | Ciao, Ich habe mal ein paar Regexpressions zusammengefummelt, mit denen Funktionen wie Sub, Mul u.s.w automatisch aus dem Quelltext entfernt werden können. Hiermit können keine verschachtelte Funktonen ersetzt werden und auch OR und AND bleiben unbehandelt. Trotzdem kann es einem eine Menge Arbeit abnehmen. KompilierenMarkierenSeparierenDeclare Term$[10,2],Wert$[5]
Declare Edit&,Text&,hFont&,btnLaden&,btnStarten&,btnSpeichern&,Liste&,ListeFertig&
Term$[0,0] = ([Ss][Uu][Bb])+ ?~(
Term$[1,0] = (([Aa][Dd][Dd])+ ?~()
Term$[2,0] = (([Aa][Dd][Dd]~$)+ ?~()
Term$[3,0] = (([Mm][Uu][Ll])+ ?~()
Term$[4,0] = ([Dd][Ii][Vv]+ ?~()
Term$[5,0] = ([Dd][Ii][Vv]&+ ?~()
Term$[6,0] = ([Aa][Nn][Nn]+ ?~()Wem was dazu einfällt...
Term$[7,0] = ([Oo][Rr]+ ?~()
Term$[8,0] = ([Mm][Oo][Vv][Ee][Ll][Ii][Ss][Tt][Tt][Oo]+([Ll][Ii][Ss][Tt]|[Cc][Hh][Oo][Ii][Cc][Ee]|[Ee][Dd][Ii][Tt]) ?~()
Term$[9,0] = (([Ss][Ee][Tt])([Aa][Uu][Tt][Oo][Pp][Aa][Ii][Nn][Tt]|
[Dd][Ee][Cc][Ii][Mm][Aa][Ll][Ss]|
[Nn][Uu][Mm][Ww][Ii][Dd][Tt][Hh]|
[Cc][Hh][Aa][Rr][Ss][Ee][Tt]|
[Ee][Rr][Rr][Oo][Rr][Ll][Ee][Vv][Ee][Ll]|
[Ff][Ii][Ll][Ee][Mm][Oo][Dd][Ee]|
[Tt][Rr][Uu][Ee][Cc][Oo][Ll][Oo][Rr]|
[Ss][Tt][Rr][Ww][Ii][Dd][Tt][Hh])) [0-9]+
Term$[0,1] = -
Term$[1,1] = +
Term$[2,1] = +
Term$[3,1] = *
Term$[4,1] = /
Term$[5,1] = \
Term$[6,1] = &
Term$[7,1] = |
Term$[8,1] = MoveListToHandle(
Wert$[0] = ( ?[0-9]+(~.[0-9]+)? ?)Zahl
Wert$[1] = ( ?[!%&]?[A-Za-z0-9]+[!%&]? ?)numerische Variable; Hex-, Binär- oder Octalzahl; Konstante oder Systemvariable
Wert$[2] = ( ?q{1}.*q{1} ?)String
Wert$[3] = ( ?([A-Za-z0-9ÄÖÜäöü~-_])+~$+ ?)Stringvariable oder Konstante
Wert$[4] = ( ?~$+[A-Za-z0-9ÄÖÜäöü~-_]+ ?)Stringkonstante
Proc Bearbeiten
Parameters Zeile$,hEdit&,hText&
Declare Funktion$,RegExpVar$,FunktionTransformiert$
Case Zeile$ > :SetText hEdit&,Zeile$
{ Sub:
RegExpVar$ = Term$[0,0] + ( + Wert$[0] + | + Wert$[1] + ) + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[0,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[0,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{ Add:
RegExpVar$ = Term$[1,0] + ( + Wert$[0] + | + Wert$[1] + ) + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[1,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[1,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{Add$:
RegExpVar$ = Term$[2,0] + ( + Wert$[2] + | + Wert$[3] + | + Wert$[4] + ),( + Wert$[2] + | + Wert$[3] + | + Wert$[4] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[2,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[2,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{Mul:
RegExpVar$ = Term$[3,0] + ( + Wert$[0] + | + Wert$[1] + ) + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[3,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[3,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{Div
RegExpVar$ = Term$[4,0] + ( + Wert$[0] + | + Wert$[1] + ) + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[4,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[4,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{Div&
RegExpVar$ = Term$[5,0] + ( + Wert$[0] + | + Wert$[1] + ) + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Set(RegEx,1)
FunktionTransformiert$ = Translate$(Funktion$,Term$[5,0],()
FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[5,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{MoveListTo
RegExpVar$ = Term$[8,0]
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
FunktionTransformiert$ = Translate$(Funktion$,Funktion$,Term$[8,1])
Set(RegEx,0)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
{Set...
RegExpVar$ = Term$[9,0]
Declare Zahl$
While Match$(RegExpVar$,Zeile$) >
Funktion$ = Match$(RegExpVar$,Zeile$)
Zahl$ = SubStr$(Funktion$,2, )
FunktionTransformiert$ = Translate$(Funktion$,Zahl$,q, + Zahl$ + ))
FunktionTransformiert$ = Translate$(FunktionTransformiert$,Left$(FunktionTransformiert$,3),Left$(FunktionTransformiert$,3) + (q)
Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
Case Zeile$ > :SetText hText&,Zeile$
Wend
}
Return Zeile$
EndProc
Proc DateiLaden
Declare Datei$,Zeile$
Datei$=LoadFile$(Profan-Code laden,Profan-Code (*.prf)|*.prf|
+ Include-Datei (*.inc)|*.inc)
If Datei$ >
ClearList Liste&
Assign #1,Datei$
Reset #1
WhileNot @Eof(#1)
Input #1,Zeile$
AddString(Liste&, Zeile$)
Wend
Close #1
WindowTitle Datei$ + geladen
EndIf
EndProc
Proc DateiBearbeiten
If GetCount(Liste&) > 0
Declare Zeile$,ZeileNeu$
ClearList ListeFertig&
WhileLoop 0,GetCount(Liste&)
locate 12,0
Zeile$ = GetString$(Liste&,&Loop)
ZeileNeu$ = Bearbeiten(Zeile$,Edit&,Text&)
AddString(ListeFertig&,ZeileNeu$)
If ZeileNeu$ <> Zeile$
AddString Str$(&Loop) + + Trim$(Zeile$)
AddString Str$(&Loop) + + Trim$(ZeileNeu$)
EndIf
Wend
ListBox$(Änderungen,2)
WindowTitle Translate$(GetText$(%hwnd),geladen,bearbeitet)
EndIf
EndProc
Proc DateiSpeichern
If GetCount(ListeFertig&) > 0
Declare Datei$
Datei$ = SaveFile$(Datei speichern,Profan-Code (*.prf)|*.prf|
+ Include-Datei (*.inc)|*.inc|
+ Andere (*.*)|*.*))
If Datei$ >
Assign #1,Datei$
ReWrite #1
WhileLoop 0,GetCount(ListeFertig&)
Print #1,GetString$(ListeFertig&,&Loop)
Wend
Close #1
WindowTitle Translate$(GetText$(%hwnd),bearbeitet,gespeichert)
EndIf
EndIf
EndProc
Window 1,1 - 1100,400
hFont& = Create(Font,MS Sans Serif,14,0,0,0,0)
SetDialogFont hFont&
Edit& = Create(Edit,%hwnd,,0,0,Width(%hwnd),24)
Text& = Create(Text,%hwnd,,0,50,Width(%hwnd),24)
btnLaden& = Create(Button,%hwnd,laden,10,100,60,24)
btnStarten& = Create(Button,%hwnd,starten,80,100,60,24)
btnSpeichern& = Create(Button,%hwnd,speichern,150,100,60,24)
Liste&=Create(List,0)
ListeFertig&=Create(List,0)
While 1
Waitinput
If Clicked(btnLaden&)
ChDir C:/ProfanTools
DateiLaden
ElseIf Clicked(btnStarten&)
DateiBearbeiten
ElseIf Clicked(btnSpeichern&)
DateiSpeichern
EndIf
Wend
DeleteObject hFont&
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 10.10.2006 ▲ |
| |
| | | | - Page 4 - |
| | Jac de Lad | Hab grad gesehen, dass das mit TrueColor nicht an mich gerichtet war. Und ich habe noch einen Fehler bei den @s gefunden, sie dürfen nämlich NICHT alle entfernt werden: die bei Klassendefinitionen müssen erhalten bleiben. |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 13.10.2006 ▲ |
| |
| | Jörg Sellmeyer | Hallo Jac, Mach doch mal einen eigenen Thread per Dein Programm. Sonst weiß man gar nicht mehr, wer auf was antwortet.
Klammern müssen auf jeden Fall drin bleiben, da die Operatoren unterschiedliche Rangstufen haben.
(( 1< 2) < (3 < 4)) ist was komplett Anderes als 1 < 2 < 3 < 4 Die Klammerungen geben ja jede per sich erstmal einen Wert. Das zu unterscheiden, kann glaube ich kein Programm leisten, da da das Hirnschmalz vom Programmierer drinsteckt.
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 13.10.2006 ▲ |
| |
| | Peter Max Müller | Aloha,
An J.L
Jetzt ist eigentlich nichts mehr zu tun...
Oh doch.
Orginal: KompilierenMarkierenSeparieren Ergebnis: KompilierenMarkierenSeparieren Das sind die letzten unter XProfed 0.99c angezeigten Hinweise. Wenn Du das noch hinbekommst , wovon ich ausgehe , ist Dein Prog wohl fertig.
Saluto P.M.M
PS.: Haben andere XProfan Community Mitglieder keinen Code zum testen? Wohl alle schon auf Assembler.Oder Copy und Paste Junkies und schon fertig mit modernisieren |
| | | | |
| | Jörg Sellmeyer | Hi Mäxchen, kommst Du etwa da wech, wo ich auch wech komme?
Peter Max Müller
Wie?? Die Fenstererzeugung in meinem oder in Deinem Code? Das wäre auf jeden Fall etwas per die Bug-Ecke!
Peter Max Müller
Wird erledigt
Peter Max Müller
Ist das denn die Originalzeile aus Deinem Code?
Jedenfalls Danke fürs Testen!
Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 13.10.2006 ▲ |
| |
| | Jörg Sellmeyer | So, jetzt gibts das Programm gleich als Exe:
einige optische Verbesserungen vorgenommen die Bequemlichkeit aumento (Zeilen können verändert werden, um Code nachzubearbeiten) Minimalhilfe hinzugefügt Fortschrittsanzeige verbessert Abbruchmöglichkeit bei Hängern eingebaut oben erwähnte Codezeilen funktionieren jetzt weitere kleine Bugs ausgebaut hoffentlich keine Neuen eingebaut (ich glaube nicht, daß jemand ein Copyright auf den Spruch hat, oder?)
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Dietmar Horn | Hallo Jörg,
bei mir unter XP-Home läßt sich das Programm leider gar nicht erst starten.
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.10.2006 ▲ |
| |
| | Jörg Sellmeyer | Seltsam, das gleiche hat Michael auch schon berichtet und mit einer kryptischen Fehlermeldung belegt. Schau mal in diesem Thread 2 Seiten vorher. Max hat etwas ähnliches erlebt und die Zeile Window 1,1 - 1100,800 geändert. Danach lief es. Er hat leider nicht geschrieben, was er geändert hat. Hast Du mal eine frühere Version des Progamms getestet. Bei mir unter XP Professional corre es wie geschmiert. iF hat mit seinem Okrea auch das Problem. Hoffentlich hat sich nicht noch ein übler Bug in Profan eingenistet.
Ich habs mal etwas umgestaltet. Evtl war ein Textfeld, das circa den Rand rausragte das Problem. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Dietmar Horn | Ja, diese Version startet wenigstens, auch wenn das Programmfenster per 1024 x 768 in der Höhe um etwa 20 - 30 Pixel kleiner sein potuto, damit es vollständig auf den Bildschjirm paßt.
Den Rest werde ich später testen.
Ach so: ältere Versionen wollte ich ebenfalls testen, doch weil da bei mir absolut gar nichts passierte (noch nicht mal eine Fehlermeldung), hatte ich mich erst mal nicht grande weiter damit befaßt.
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.10.2006 ▲ |
| |
| | Dietmar Horn | Auf die Schnelle rausgefischt:
Aus -> FileMode 2 wird -> Set(Filemode ,2) gemacht (also Bug, weil ein Leerzeichen zuviel).
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.10.2006 ▲ |
| |
| | Jörg Sellmeyer | Die Dimensione habe ich jetzt nochmal an kleiner Bildschirme angepaßt. Ich vergeß immer, daß ich einen 19er habe und das nichtgerade Standard ist. Die Set...-Befehle sollten jetzt funktionieren.
(noch nicht mal eine Fehlermeldung), hatte ich mich erst mal nicht grande weiter damit befaßt.
Schade, hätteste wenigstens das mal kurz mitgeteilt, dann hätte ich mich früher auf die Fehlersuche machen können.
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Dietmar Horn | Hallo Jörg,
bei kleineren Bildschirmauflösungen knallt es bis jetzt trotzdem noch!
Tip: einfach %MaxX und %MaxY abfragen und dementsprechend (unter Berücksichtigung des Client-Bereiches des Hauptfensters) die Objekte auf dem Hauptfenster basteln.
Meiner Meinung nach sollte ein solches Tool auch heutzutage noch abwärtskompatibel bis zu 640 x 480 sein (nur dazu potuto ich Dir ein kilometerlanges Posting als Begründung schicken - warum, wieso, weshalb usw. eine solche Vorgehensweise noch immer günstiger wäre ...).
Die oberen beiden CreateText-Zeilen würde ich ganz weglassen. Auf schnelleren Rechnern erkennt man da sowieso nix (außer daß da Irgendwas relativ sinnlos vor sich rumzappelt) - und auf langsameren PCs wird durch das zweimalige SetText bei jeder Codezeile das Programm nur unnötig ausgebremst. Bei längeren Quelltexten interessieren solche Infos eh keinen - außer daß das Programm mit seinem Getue possibile schnell fertig werden möge.
Auch würde ich die beiden Listviews bzw. Gridboxen ebenfalls nicht zeitnah ständig mit jeder der gerade bearbeiteten Codezeilen füllen, denn das bremst nur unnötig und interessiert keinen. Einfach vom Programm die Arbeit so schnell wie possibile machen lassen - und gut is es.
Zum Schluß wird schlicht und einfach in irgendeiner vernünftigen Form das Ergebnis präsentiert, evtl. noch mit Editiermöglichkeit, o.ä. Den Rest wird sich jeder Programmierer sowieso selber mit seinem bevorzugten Editor anschauen und testen - also, ob alles korrekt umgewandelt worden ist, usw. ...
Der ganze Grafik-Schnick-Schnack, usw. ist meiner Meinung nach bei einem solchen Tool Pille-Palle und also völlig uninteressant.
Notfalls würden bei längeren Sources als Fortschrittsanzeige (damit der User nicht glaubt, daß sich das Programm evtl. aufgehängt hätte) ein paar kreiselnde bzw zappelnde einfache ASCII- oder Ansi-Zeichen ausreichen.
Ich glaube, sowas wird insgesamt auch als Software-Ergonomie bezeichnet (oder so ähnlich ...).
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 14.10.2006 ▲ |
| |
| | Jörg Sellmeyer |
bei kleineren Bildschirmauflösungen knallt es bis jetzt trotzdem noch!
Das ist ja ärgerlich! Du hast naturalmente recht - das muß angepaßt werden. Trotzdem darf meiner Meinung nach kein simpler Absturz passieren. Ich vermute mal, das Profan da noch eine Macke hat. Deine Anregungen hatte ich alle schon auf der ToDo-Liste. Es werden noch ein paar Optionseinstellungen dazukommen, die die grafischen Sachen Abschaltbar machen. (einfach mal mit rechter Maustaste auf das Fenster klicken) Sind denn Deine Codes korrekt übersetzt worden? Wenn da noch Fehler sind, ist es mir im Moment wichtiger, die zu korrigieren.
Danke fürs Testen! Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
|
Zum QuelltextTopic-Options | 43.468 Views |
ThemeninformationenDieses Thema hat 10 subscriber: |