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 2 -



Peter
Max
Müller
nabend,
Wie du meinst.
Dachte nur wegen der Xprofan Aiuto
WRITEINI SPIEL.INI,MeinProgramm, HIGHSCORE=@Str$(HighScore&)

Also ohne Klammern.

Saluto

@IF : Mein Avatar Bild war frei von rechten dritter und hat auch nicht gegen die guten
Sitten verstoßen und trotzdem ist es wieder gelöscht worden.Mittlerweile schon das 4te.
Why?
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 




Jörg
Sellmeyer
Peter Max Müller
Howdy,
Weil ich mir sicher bin das du deinen Code so hinkriegst das er alles ordnungsgemäß umwandelt habe ich mir gedacht das ich das mit den dbase Sachen mal erwähne.


Danke!

Peter Max Müller
Nochwas:
KompilierenMarkierenSeparieren
WriteIni (add$(PrgDir$,Inis$)),VERG,Anzahl = verganzahl$
>

wird umgewandelt zu:
KompilierenMarkierenSeparieren
WriteIni ((PrgDir$ + Inis$)),VERG,Anzahl = verganzahl$
>

Besser wäre glaube ich:
KompilierenMarkierenSeparieren
WriteIni PrgDir$ + Inis$,VERG,Anzahl = verganzahl$
>

Also ohne Klammern.Oder.

Tschüßikowski


Das wäre definitiv nicht besser, da Du ja das erste Klammerpaar schon selbst im Code stehen hast und Io l' eigentlichen Code naturalmente possibile unangetastet lasse!
Die umgewandelten Funktionen lasse ich in Klammern, da sonst Probleme mit verschachtelten Funktionen auftreten können/werden.
Bei Strings potuto man das evtl. weglassen aber das Risiko, daß dann was schiefgeht ist größer als der daraus entstandene Nutzen.
Wie iF schon sagt: lieber ein paar Klammern zuviel, als zuwenig.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.10.2006  
 




Peter
Max
Müller
Jetzt aber

Du hast Recht. Einleitende Klammern kommen von mir und sollten demnach nicht angetastet werden.Habe ich nicht drauf geachtet.
Aber die Klammern nach dem umwandeln sind definitiv zu viel.
Ich weiß , ich weiß: Lieber zu viel als zu wenig. Sagt das Imposta auch immer.
KompilierenMarkierenSeparieren
WriteIni (add$(PrgDir$,Inis$)),DRUCK,Anzahl = Str$(Seizal%)
>

nach
KompilierenMarkierenSeparieren
WriteIni ((PrgDir$ + Inis$)),DRUCK,Anzahl = Str$(Seizal%)
>
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 





@IF : Mein Avatar Bild war frei von rechten dritter und hat auch nicht gegen die guten
Sitten verstoßen und trotzdem ist es wieder gelöscht worden.Mittlerweile schon das 4te.
Why?


Ich müsste ins LogFile schauen wer Dein Ava deaktiviert hat - muss aber gestehen das ich auch nicht 100%ig sicher war ob es sich hierbei um etwas Eigenes handelt. Es war ein Foto ne? Jedenfalls anscheinlich keins von Dir ?! - und ausgesehen hat es auch nicht als ob es ein eigener Schnappschuss war. Vielleicht wurde es einfach nur deshalb sicherheitshalber deaktiviert weil ebend nicht eindeutig war ob es tatsächlich rechtefrei ist.

Ich muss auch zugeben das ich es gut heisse wenn lieber ein Avatar mehr deaktiviert wird, statt vielleicht eins zu wenig. Kann wenigstens niemand grobe Verletzung der Sorgfaltspflicht nachsagen.
 
12.10.2006  
 




Jac
de
Lad
Bitte nicht hauen, aber ich hatte auch schon mal die Idee. Ich habs mal fertiggestellt. Es gibt noch Probleme mit Variablen, die gleiche oder ähnliche Namen wie die Funktionen haben (sollte nur wend betreffen) und mit selbst definierten Funktionen, die ähnliche Namen haben (zum Beispiel Gosub()). Und mit mehreren Befehlen, die durch : getrennt, werden, habe ich noch nix eingebaut. Aber als Testversion sits vielleicht interessant...

6 kB
Hochgeladen:12.10.2006
Downloadcounter81
Download
 
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
12.10.2006  
 




Jörg
Sellmeyer
So, jetzt funktioniert die Zeile auch. Außerdem sind die meisten DB-Funktionen/-befehle drin.
Wenn noch was fehlt: Bescheid sagen. Ich habe einfach die aus der Aiuto per Profan 9 kopiert.

Neu ist außerdem ein Eingabefeld, in das einzelne Zeilen zum Umwandeln eingefügt/-geschrieben werden können.

Diese dBase-Begriffe werden jetzt ersetzt. da ich selber keinen nennenswerten Code mit diesen Funktionen habe, konnte ich nicht allzusehr testen. Ich wäre daher froh circa Rückmeldungen dazu.

db(Appendblank|Browse|Close|Delete|Edit|Find|Get$|GetField$|GetMemo|Go|Index|Open|Pack|Put|PutField|
PutMemo|PutRec|Seek|Undelete|Use)

db(Create|CreateIndex)

Wend

CloseRW


Saluto
Jörg

Nachtrag:
gerade noch einen Fehler ausgebaut: dbCreate wurde nicht übersetzt. Jetzt gehts.

19 kB
Hochgeladen:13.10.2006
Downloadcounter76
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.10.2006  
 




Michael
Wodrich
dbgetfield$ fehlt noch


Überflüssige Funktionen automatisch entfernen


überflüssig sind sie ja nicht, sie haben sich nur ein wenig geändert.

Schöne Grüße
Michael Wodrich

P.S.: es fehlt noch mehr.
Schau doch einfach bei der Altlasten.inc / kombatibility.inc ab. Dort findest Du ja auch die Umsetzung. Der Code ist frei - das eine soll schnelle Abhilfe bei den (irgendwann) fehlenden Funktionen sein - das andere soll den Fortbestand und die leichte Pflege des Codes sichern.
Beides wird gebraucht.
P.P.S.: ...wirklich schnell...
 
Programmieren, das spannendste Detektivspiel der Welt.
13.10.2006  
 




Michael
Wodrich
Bekomme Dein Proggi nicht zum Laufen. Exception Fehler und Abflug...
 
Programmieren, das spannendste Detektivspiel der Welt.
13.10.2006  
 




Jörg
Sellmeyer
Michael Wodrich
Bekomme Dein Proggi nicht zum Laufen. Exception Fehler und Abflug...


Oh... da kann ich gar nichts zu sagen Ich habgerade mal selber die letzte Version heruntergeladen und sie corre problemlos.
Schmiert das Programm denn bereits beim Start ab oder wenn Du versuchst, eine File zu laden oder zu bearbeiten?
Teste doch nochmal. Ich hatte noch einen Fehler bei den RegExp entdeckt. Wer kann denn ahnen, daß um diese Zeit hier noch jemand so aktiv ist.

Saluto
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.10.2006  
 




Michael
Wodrich
Wieder nichts.
5 Buttons - links leeres Fenster - rechts listview
und nach dieser Anzeige dann gleich der Abflug.

Ich versuche mal ein Bild anzuhängen, aber habe immer pech damit an einem tag wo die quersumme ...

Kleine Pause, nach dem Frühstück gehts weiter.

Schöne Grüße
Michael Wodrich

26 kB
Hochgeladen:13.10.2006
Downloadcounter105
Download
 
Programmieren, das spannendste Detektivspiel der Welt.
13.10.2006  
 




Jörg
Sellmeyer
Ich potuto mirdenken, woran es liegt:
In den globalen Deklarationen steht Term$[16,2]
Ändere das in Term$[20,2]. Ich habe nämlich schon 0-16 => 17 in Gebrauch. Erstaunlicherweise gibt das bei mir keine Probleme.
In der neuen Version istdas korrigiert.

Saluto
Jörg

19 kB
Hochgeladen:13.10.2006
Downloadcounter101
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.10.2006  
 



Hm vielleicht stürzt deshalb das aktuelle Release (nicht das veröffentlichte) von meinem Okrea auch ab - vielleicht liegts an den Arrays hmmm.
 
13.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.350 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