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 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? |
| | | | |
| | 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
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 nach KompilierenMarkierenSeparieren |
| | | | |
| | |
@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. |
| | | | |
| | 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... |
| | | 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. |
| | | 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 |
| | | 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 |
| | | 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. |
| | | | |
|
Zum QuelltextTopic-Options | 43.350 Views |
ThemeninformationenDieses Thema hat 10 subscriber: |