Deutsch
Quelltexte/ Codesnippets

Automatisch Entfernen Funktionen überflüssige

 

Jörg
Sellmeyer
Hallo,
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  
 




Jörg
Sellmeyer
Kleines Update:
Sub(, Add(, Add$(, Mul(, Div(, Div&, MoveListTo...( und Set... werden erkannt und umgewandelt (wenn sie nicht zu komplex aufgebaut sind)
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.10.2006  
 




Jörg
Sellmeyer
Nochn Update:
KompilierenMarkierenSeparieren
Def DelLast(2) Mid$(@$(1),1,Sub(Len(@$(1)),@&(2)))
Declare Term$[15,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][Dd]+ ?~()
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$[10,0] = @?([Cc][Rr][Ee][Aa][Tt][Ee]([Cc][Hh][Ee][Cc][Kk]|([Ss][Oo][Rr][Tt][Ee][Dd])?[Ll][Ii][Ss][Tt]|
[Cc][Hh][Oo][Ii][Cc][Ee]|[Gg][Rr][Oo][Uu][Pp])[Bb][Oo][Xx]) ?~(
Term$[11,0] = @?[Cc][Rr][Ee][Aa][Tt][Ee]([Dd][Ee][Ff]|[Rr][Aa][Dd][Ii][Oo])?[Bb][Uu][Tt][Tt][Oo][Nn] ?~(
Term$[12,0] = @?[Cc][Rr][Ee][Aa][Tt][Ee](([Ee][Xx][Tt])?[Dd][Ii][Aa][Ll][Oo][Gg]|([Mm][Uu][Ll][Tt][Ii])?[Ee][Dd][Ii][Tt]|
[Ff][Oo][Nn][Tt]|[Ii][Cc][Oo][Nn]|[Tt][Ee][Xx][Tt]|([Vv]|[Hh])[Ss][Cc][Rr][Oo][Ll][Ll]|[Ww][Ii][Nn][Dd][Oo][Ww]) ?~(
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&,Translate$(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&,Translate$(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&,Translate$(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&,Translate$(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&,Translate$(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&,Translate$(Zeile$,&,&&)

        Wend

    }

    {And

        RegExpVar$ = Term$[6,0] + ( + Wert$[0] + | + Wert$[1] + )  + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Set(RegEx,1)
            FunktionTransformiert$ = Translate$(Funktion$,Term$[6,0],()
            FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[6,1])
            Set(RegEx,0)
            Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
            Case Zeile$ > :SetText hText&,Translate$(Zeile$,&,&&)

        Wend

    }

    {Or

        RegExpVar$ = Term$[7,0] + ( + Wert$[0] + | + Wert$[1] + )  + , + ( + Wert$[0] + | + Wert$[1] + ) + ~)

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Set(RegEx,1)
            FunktionTransformiert$ = Translate$(Funktion$,Term$[7,0],()
            FunktionTransformiert$ = Translate$(FunktionTransformiert$,,,Term$[7,1])
            Set(RegEx,0)
            Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
            Case Zeile$ > :SetText hText&,Translate$(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&,Translate$(Zeile$,&,&&)

        Wend

    }

    {Set...

        RegExpVar$ = Term$[9,0]
        Declare Teil$,Teil1$,Teil2$

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Teil$ = SubStr$(Funktion$,2, )
            FunktionTransformiert$ = Translate$(Funktion$,Teil$,q, + Teil$ + ))
            FunktionTransformiert$ = Translate$(FunktionTransformiert$,Left$(FunktionTransformiert$,3),Left$(FunktionTransformiert$,3) + (q)
            Zeile$ = Translate$(Zeile$,Funktion$,FunktionTransformiert$)
            Case Zeile$ > :SetText hText&,Translate$(Zeile$,&,&&)

        Wend

    }

    {Create...Box

        RegExpVar$ = Term$[10,0]

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Funktion$ = Translate$(Funktion$,@,)
            Teil1$ = SubStr$(Zeile$,1,Funktion$)
            Teil2$ = SubStr$(Zeile$,2,Funktion$)
            FunktionTransformiert$ = Translate$(Funktion$,Left$(Funktion$,6),Left$(Funktion$,6) + (q)
            FunktionTransformiert$ = DelLast(FunktionTransformiert$,1) + q,
            Set(RegEx,1)

            If InStr(([Ss][Oo][Rr][Tt][Ee][Dd]),FunktionTransformiert$)

                If SubStr$(Teil2$,2,,) = qq

                    Teil2$=Ins$(1,Teil2$,InStr(qq,Teil2$))
                    Teil2$=Del$(Teil2$,InStr(qq,Teil2$),2)
                    FunktionTransformiert$=Translate$(FunktionTransformiert$,([Ss][Oo][Rr][Tt][Ee][Dd]),)

                EndIf

            EndIf

            Zeile$= Teil1$ + FunktionTransformiert$ + Teil2$
            Case Zeile$ > :SetText hText&,Translate$(Zeile$,&,&&)

        Wend

    }

    {Create...Button

        RegExpVar$ = Term$[11,0]

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Funktion$ = Translate$(Funktion$,@,)
            Teil1$ = SubStr$(Zeile$,1,Funktion$)
            Teil2$ = SubStr$(Zeile$,2,Funktion$)
            FunktionTransformiert$ = Translate$(Funktion$,Left$(Funktion$,6),Left$(Funktion$,6) + (q)
            FunktionTransformiert$ = DelLast(FunktionTransformiert$,1) + q,
            Zeile$= Teil1$ + FunktionTransformiert$ + Teil2$
            Case Zeile$ > :SetText hText&,Translate$(Zeile$,&,&&)

        Wend

    }

    {Create...Rest

        RegExpVar$ = Term$[12,0]

        While Match$(RegExpVar$,Zeile$) >

            Funktion$ = Match$(RegExpVar$,Zeile$)
            Funktion$ = Translate$(Funktion$,@,)
            Teil1$ = SubStr$(Zeile$,1,Funktion$)
            Teil2$ = SubStr$(Zeile$,2,Funktion$)
            FunktionTransformiert$ = Translate$(Funktion$,Left$(Funktion$,6),Left$(Funktion$,6) + (q)
            FunktionTransformiert$ = DelLast(FunktionTransformiert$,1) + q,
            Zeile$= Teil1$ + FunktionTransformiert$ + Teil2$
            Case Zeile$ > :SetText hText&,Translate$(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&

Alle Create-Funktionen werden umgewandelt. And und Or ebenfalls.
Als nächstes werde ich das ganze mal mit Franks ListView.dll verbinden. Dann kann man die Zeilen direkt nachbearbeiten und auswählen, was ersetzt wird und was nicht.
Bitte mal Feedback, ob das bei komplexen Programmen nützt.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.10.2006  
 




Jörg
Sellmeyer
Und noch ein Update:
Auch verschachtelte Funktionen werden jetzt in Operatoren umgewandelt.
Eine Liste zeigt den fertig bearbeiteten Code an und eine nur die Änderungen.
Mit dem Button testen wird im Tempverzeichnis eine temporäre (automatische Namensvergabe mit Datum und Zeitstempel - sie wird gleich wieder gelöscht) Datei erzeugt und gestartet.

Das wird umgewandelt:
Add(
Add$(
And(
Div(
Div&(
Mul(
Or(
Sub(

Create...(Check-, Choice-, Group-, (Sorted)ListBox, (Multi)Edit, Font, Radio-, (Def)Button)
MoveListTo...(Choice, Edit, List)
Set... (AutoPaint, ErrorLevel, TrueColor)

Decimals, FileMode, NumWidth und StrWidth folgen noch.

Eine Definition der Create...-Funktionen mit Def wird nicht umgewandelt. Im Code wird aber umgewandelt.

Bei mir jedenfalls funktioniert es mit Code von mehreren tausend Zeilen.
@Dietmar:Lass doch mal Dein Mammutprojekt damit behandeln. Du wirst Dich allerdings auf eine längere Kaffeepause einrichten können.

Gruß
Jörg

16 kB
Hochgeladen:12.10.2006
Ladeanzahl155
Herunterladen
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.10.2006  
 




Peter
Max
Müller
Hi,
Folgende Zeile wird falsch übersetzt:
KompilierenMarkierenSeparieren
LET Maschine$   = ReadIni$(add$(PrgDir$,DATEN+maschname$+.DAT),SORTE,Maschine)

in
KompilierenMarkierenSeparieren
LET Maschine$   = ReadIni$((PrgDir$ + DATEN+maschname$+.DAT) + SORTE + Maschine)

Gruß
P.M.M
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 




Jörg
Sellmeyer
Ja, leider

Das mit dem Add$ ist aber auch so eine Sache... Da ja alles in einem String vorkommen kann, ist es schwierig den mit einer RegExpression dingfest zu machen.
Ich werd mal sehen, was ich da machen kann.
Danke jedenfalls für die Rückmeldung!

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.10.2006  
 




Jörg
Sellmeyer
Ging leichter als gedacht - hoffentlich...

Diese Zeile funktioniert jedenfalls jetzt.

Gruß
Jörg

Das wird umgewandelt:
Add(
Add$(
And(
Div(
Div&(
Mul(
Or(
Sub(

Create...(Check-, Choice-, Group-, (Sorted)ListBox, (Multi)Edit, Font, Radio-, (Def)Button)
MoveListTo...(Choice, Edit, List)
Set... (AutoPaint, ErrorLevel, TrueColor)
Decimals, FileMode, NumWidth und StrWidth
werden in Set(...,n%) umgewandelt

16 kB
Hochgeladen:12.10.2006
Ladeanzahl111
Herunterladen
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.10.2006  
 




Peter
Max
Müller
Jo Men
Das funktioniert.
Aber folgende Zeile läßt die Umwandlung stoppen:
KompilierenMarkierenSeparieren
LET D% = Create(Dialog,%Hwnd,Maschine : +Maschine$+  /  Stationsanzahl : +Stanzahl$,SUB(DIV(%MAXX,2),DIV(0,2)),SUB(DIV(%MAXY,2),DIV(0,2)),0,0)

Auch scheint es das die dbase Befehle nicht umgewandelt werden.
KompilierenMarkierenSeparieren


Zitat aus dem RGH Phorum
GO
GET *
GETFIELD *
PUT
PUTFIELD
PUTREC
GETMEMO
PUTMEMO
FIND
SEEK
APPENDBLANK
BROWSE
CLOSE
DELETE
EDIT
INDEX
OPEN
PACK
UNDELETE
USE
CREATE **
CREATEINDEX **

Aus dpos& = dbGo(>) wird also dpos& = db(Go, >). An den Funktionalitäten wurde nichts geändert.


Gruß
P.M.M
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 




Jörg
Sellmeyer
Die Zeile muß ich mir mal zu Gemüte führen. Du hast da aber auch Konstrukte...

Die DBase-Sachen habe ich noch gar nicht eingebaut, da ich mich selber überhaupt nicht damit beschäftige.
Ich muß also erst mal sehen, wie die Syntax da ist, bevor ich das integriere.

Wird denn der Code nach dbCreate korrekt umgewandelt?

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.10.2006  
 




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.

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
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 




Peter
Max
Müller
Ups, was überlesen....

tja dbase Befehle sind jetzt Containerfunktionen.

Nicht mehr:
KompilierenMarkierenSeparieren
sondern
KompilierenMarkierenSeparieren
Halt so wie damals die Create Geschichten.
Und wie ich gesehen habe wandelst Du zum Beispiel SetErrorLevel N auch um in
@Set(ErrorLevel, N).
Ist ja eigentlich das selbe Spielchen.
 
XProfan X3, X4ß, Win 10.1
12.10.2006  
 




Besser wäre glaube ich:

[Quelltextfenstergröße: groß] [Quelltextfenstergröße: normal] [Quelltext markieren]
WriteIni PrgDir$ + Inis$,VERG,Anzahl = verganzahl$

Also ohne Klammern.Oder.


Keinesfalls wäre das besser! Das Reduzieren von Klammern kann erfahrungsgemäß bei XProfan nicht gut sein! Lieber mehr statt weniger!
 
12.10.2006  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

43.322 Betrachtungen

Unbenanntvor 0 min.
Walter16.02.2019
AndreasS27.11.2018
Jörg Sellmeyer14.05.2018
PETER195605.09.2015
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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