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 - |
| 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 ▲ |
| |
| | | | - Page 5 - |
| | Frank Abbing | Schon ein nützliches Programm, gerade per ältere Quellcodes. Nur EQU und EQU$ werden wohl noch nicht übersetzt, die Quellcodes ja höchst unübersichtlich machen. |
| | | | |
| | Jörg Sellmeyer | Die Habe ich doch glatt vergessen! Danke Frank!
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Jörg Sellmeyer | Ich denke ich nähere mich einer finale Version
Das Programm sollte jetzt unter allen Auflösungen bis mind. 800 x 600 laufen. Equ und Equ$ sind eingebaut. die bearbeiteten Zeilen werden nicht angezeigt auch die Listen nur am Ende des Vorgangs gefüllt im Optionsmenü kann das umgeändert werden (rechte Maustaste ruft das Menü auf) Wend kann auf Wunsch ausgenommen werden die Funktionsumwandlung kann auf Wunsch abgeschaltet werden (z. B. wenn nur alte DBase-Befehle in einem sonst aktuellen Code sind) die DBase-Befehle können ausgenommen werden (kleiner Geschwindigkeitsvorteil - sinnvoll wenn man diese Funktionalitäten sowieso nicht im Programm hat.)
eine im Editfeld unter der rechten Listbox bearbeitete Zeile ersetz mit Enter direkt die entsprechende Zeile in der linken Listbox.
Bei mir braucht das Programm per ca. 5000 Zeilen 53 Sekunden. Also auch grande Programme lassen sich in akzeptabler Zeit umwandeln. Ich werde noch eine Funktion einbauen mit der nach der Umwandlung weitere (nicht bearbeitete ) Vorkommen der überflüssigen Begriffe finden lassen. die können dann zu Fuß nachbearbeitet werden.
Bitte testen und rückmelden. Danke nochmal an alle Tester! @Roland: Wenn es denn endgültig fertig ist, kann das Programm gerne mit auf die CD.
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Peter Max Müller | Hello, An Jörch, (Ich weiß ich nerve )
Am Ende des Umwandelns kommt eine Fehlermeldung mit Zeile 527 Variable nicht declariert I%
Und diese Zeile kannste mal testen.
Create(Text,D%,°C,509, 127,15,15)
Ferner fehlen scheinbar : Neq,Neq$,GT,LT und SetErrorLevel
Servus |
| | | | |
| | Rolf Koch | Ja, habe grad 30000 Zeilen durchgezogen. Werde es auf lauffähigkeit dann mal testen. Zeit war auch noch akzeptabel. Sieht schon mal super aus. Jedoch weis man nie, denn ich printe ja auch Profanbefehle in File und das muss ich bei etwas Freizeit mal näher anschauen. Aber zuerst einmal: Respekt
Achja, das mit I% nicht deklariert kommt bei mir auch. |
| | | | |
| | Jörg Sellmeyer |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.10.2006 ▲ |
| |
| | Torsten Rümker | Jörg Sellmeyer
im Optionsmenü kann das umgeändert werden (rechte Maustaste ruft das Menü auf)
Ich habe bei mir im Optionsmenü einen Anzeigefehler, wenn ich die DB befehle rausnehme (umschalten auf nein) wird auch der Menupunkt darunter auf nein umgestellt (Also: Funktionen => Operatoren). Die Einstellung des Menüpunktes ändert sich dadurch aber nicht, scheint also nur falsch vergebener Text zu sein.
MfG Torsten |
| | | Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 15.10.2006 ▲ |
| |
|
Zum QuelltextTopic-Options | 43.314 Views |
ThemeninformationenDieses Thema hat 10 subscriber: |