Fonte/ Codesnippets | | | | 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 ▲ |
| |
| | 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: KompilierenMarkierenSeparierenDef 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 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) File 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.
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 12.10.2006 ▲ |
| |
| | Peter Max Müller | | | | | |
| | 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 per die Rückmeldung!
Saluto 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.
Saluto 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 |
| | | 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: KompilierenMarkierenSeparierenLET 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.
Saluto P.M.M |
| | | | |
| | 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?
Saluto Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 12.10.2006 ▲ |
| |
| | Peter Max Müller | | | | | |
| | 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. |
| | | | |
| | |
Besser wäre glaube ich:
[Quelltextfenstergröße: grande] [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! |
| | | | |
|
Zum QuelltextTopic-Options | 43.540 Views |
ThemeninformationenDieses Thema hat 10 subscriber: |