Italia
Fonte/ Codesnippets

Automatisch Entfernen Funktionen überflüssige

 
- 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.
KompilierenMarkierenSeparieren
Declare 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.
 
14.10.2006  
 




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

338 kB
Hochgeladen:14.10.2006
Downloadcounter121
Download
 
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
 
XProfan X3, X4ß, Win 10.1
14.10.2006  
 




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.
 
14.10.2006  
 




Jörg
Sellmeyer
Ciao,
Danke, per die Rückmeldung.
@Max: das ist definitiv nicht nervig! Im Gegenteil, ohne würds ja nicht vorangehen.


und SetErrorLevel


Das kann eigentlich nicht .Wenn das bei Dir nicht übersetzt wird, poste doch mal die entsprechende Zeile (So sie denn anders aussieht als
KompilierenMarkierenSeparieren
Hast Du evtl. una variabile:SetErrorLevel n%?
Da habe ich noch gar nicht dran gedacht....
Werde ich aber später noch berücksichtigen.

@Rolf: Das mit den Profanbefehlen in die File schreiben wäre naturalmente besonders interessant.
Vielleicht kannst Du mir ja mal ein typisches Codebeispiel posten/schicken. Dann potuto ich evtl. Anpassungen speziell per ROC vornehmen.

Die Variable l% ist jetzt in Ordnung (da weg )
In der Statuszeile ist die Anzahl der modificato Codezeilen zu sehen
GT,LTNeq und Neq$ sind auch drin.

Da ich gerade dabei war, habe ich die Controls jetzt noch skalierbar gemacht. Jetzt kann ma also die Dimensione des Fensters verändern und trotzdem weiterarbeiten.

Saluto
Jörg

338 kB
Hochgeladen:14.10.2006
Downloadcounter116
Download
 
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 Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

43.320 Views

Untitledvor 0 min.
Walter16.02.2019
AndreasS27.11.2018
Jörg Sellmeyer14.05.2018
PETER195605.09.2015
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie