![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#16 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Du hast mich wohl falsch verstanden. Ich habe nicht vor, meinen Editor zu verkaufen, der bleibt natürlich Freeware.
Ich meinte nur, dass PrFellow längere Zeit zu kaufen war, was in der Regel für den Funktionsumfang förderlich ist. Eine Datei-weite Suche hab ich persönlich auf meine ToDo-Liste gesetzt, eine Batchsuche allerdings nicht.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#17 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Das kann der "Zitronenfalter" doch schon.
Trotzdem super |
|
|
|
|
|
#18 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Sogesehen ja, stimmt...
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#19 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Hallo
Ich habe mal ein bißchen gebastelt um mich mit X2 und der Zitrone vertraut zu machen. Herausgekommen ist dieser Code. Code:
' XProfan X2 Programm BatchErsetzen
' (c) Volkmar Göritz 2011
$H Windows.ph
Declare Int Ende, Grid, Bar, LoadBtn, SaveBtn, AddBtn, ChangeBtn, DelBtn, StartBtn, UndoBtn
Declare Int SeekEdit, ReplaceEdit
Declare Int NoExe, Mem DrawRect
Var Int IsUndo = 0
Struct TRect = X&, Y&, W&, H&
Var Int FileList = Create("List", 0)
Var Int SeekList = Create("List", 0)
Dim DrawRect, TRect
Proc CreateObjects
Declare Mem Rect
Dim Rect, TRect
~GetClientRect(%hwnd, Rect)
Var Int ColW = (Rect.W& \ 2) - 2
Var Int WH = Rect.H& - 60
Var String GridForm = "Suchen;0;" + Str$(ColW) + ";Ersetzen;0;" + Str$(ColW)
Grid = Create("GridBox", %HWnd, GridForm, 0, 4, 4, Rect.W& - 8, WH - 82)
Create("Text", %hwnd, "Suchtext", 4, WH - 76, ColW, 16)
Create("Text", %hwnd, "Ersatztext", ColW + 4, WH - 76, ColW - 4, 16)
SeekEdit = Create("Edit", %hwnd, "", 4, WH - 62, ColW - 2, 20)
ReplaceEdit = Create("Edit", %hwnd, "", ColW + 6, WH - 62, ColW - 8, 20)
UsePen 0, 1, ~GetSysColor(~Color_BtnShadow)
UseBrush 1, ~GetSysColor(~Color_BtnFace)
Rectangle 4, (WH - 30) - Rect.W& - 4, WH + 14
If IsUndo
UseBrush 1, Rgb(168, 232, 168)
Else
UseBrush 1, Rgb(232, 168, 168)
EndIf
Rectangle 4, (WH + 22) - Rect.W& - 4, WH + 54
Create("Text", %hwnd, "Ersetzenliste", 12, WH - 28, 88, 16)
Create("Text", %hwnd, "Eintrag", ColW, WH - 28, 88, 16)
LoadBtn = Create("Button", %hwnd, "Laden", 8, WH - 12, 88, 22)
SaveBtn = Create("Button", %hwnd, "Speichern", 96, WH - 12, 88, 22)
AddBtn = Create("Button", %hwnd, "Hinzufügen", ColW, WH - 12, 76, 22)
ChangeBtn = Create("Button", %hwnd, "Ändern", ColW + 76, WH - 12, 76, 22)
DelBtn = Create("Button", %hwnd, "Löschen", ColW + 152, WH - 12, 76, 22)
StartBtn = Create("Button", %hwnd, "Starte Ersetzen", 8, WH + 28, 132, 22)
UndoBtn = Create("Button", %hwnd, "Rückgängig", Rect.W& - 140, WH + 28, 132, 22)
If GetCount(FileList)
Case IsUndo : ShowWindow(StartBtn, 0)
EnableWindow StartBtn, 0
TextColor 0, -1
DrawText 146, WH + 32, Rect.W& - 148, WH + 48, Str$(GetCount(FileList)) + " Datei(en) gewählt", 1
Else
ShowWindow(StartBtn, 0)
ShowWindow(UndoBtn, 0)
TextColor Rgb(255, 64, 0), -1
DrawText 16, WH + 32, Rect.W& - 4, WH + 48, "Keine Datei(en) zur Verarbeitung gewählt", 1
EndIf
With DrawRect
.X& = 146
.Y& = WH + 22
.W& = Rect.W& - 148
.H& = WH + 54
EndWith
EnableWindow AddBtn, 0
EnableWindow ChangeBtn, 0
EnableWindow DelBtn, 0
EnableWindow UndoBtn, 0
Dispose Rect
EndProc
Proc TextMalen
Parameters Int Zahl, Max, String Msg
UseBrush 1, Rgb(228, 228, 64)
Rectangle DrawRect.X&, DrawRect.Y& - DrawRect.W&, DrawRect.H&
Case Zahl > 0 : Msg = Msg + "\nDatei " + Str$(Zahl) + " von " + Str$(Max)
TextColor 0, -1
DrawText DrawRect.X&, DrawRect.Y&, DrawRect.W&, DrawRect.H&, Msg, 1
EndProc
Proc LoadList
Declare String Zeile
Var String LoadString = LoadFile$(%hwnd, "Ersetzen-Liste laden", "*.lst", 0)
If LoadString <> ""
ClearList Grid
Assign #1, LoadString
Reset #1
WhileNot Eof(#1)
Input #1, Zeile
AddString(Grid, Zeile)
EndWhile
Close #1
EndIf
EndProc
Proc SaveList
Declare String Zeile
Var String SaveString = SaveFile$(%hwnd, "Ersetzen-Liste speichern", "*.lst", 1)
If SaveString <> ""
Assign #1, SaveString
ReWrite #1
WhileLoop GetCount(Grid)
Print #1, GetString$(Grid, &loop-1)
EndWhile
Close #1
EndIf
EndProc
Proc DoAdd ' Einträge der Editoren als neues Wertepaar eintrage
Var String Zeile = Trim$(GetText$(SeekEdit)) + "|" + Trim$(GetText$(ReplaceEdit))
AddString(Grid, Zeile)
SetText SeekEdit, ""
SetText ReplaceEdit, ""
SendMessage(SeekEdit, $B9, 0, 0)
SendMessage(ReplaceEdit, $B9, 0, 0)
EndProc
Proc DoChange ' Einträge der Editoren ersetzen aktuelle Auswahl im Grid
Var String Zeile = Trim$(GetText$(SeekEdit)) + "|" + Trim$(GetText$(ReplaceEdit))
Var Int Neu = GetCurSel(Grid)
ReplaceString(Grid, Neu, Zeile)
SetText SeekEdit, ""
SetText ReplaceEdit, ""
SendMessage(SeekEdit, $B9, 0, 0)
SendMessage(ReplaceEdit, $B9, 0, 0)
EndProc
Proc DoDelete ' Löschen aktuelle Auswahl im Grid
DeleteString(Grid, GetCurSel(Grid))
EndProc
Proc GridSel ' Auswahl einer Zeile im Grid
Var Int Sel = GetCurSel(Grid)
Case Sel < 0 : Return
Var String Zeile = GetString$(Grid, Sel)
SetText SeekEdit, SubStr$(Zeile, 1, "|")
SetText ReplaceEdit, SubStr$(Zeile, 2, "|")
SendMessage(SeekEdit, $B9, 0, 0)
SendMessage(ReplaceEdit, $B9, 0, 0)
EndProc
Proc MakeSeekList ' Erstellt Kopie der Suchgegriffe mit Anpassung für Suche nach regulären Ausdrücken
Declare String Feld1
ClearList SeekList
WhileLoop GetCount(Grid)
Feld1 = GetText$(Grid, &loop - 1, 0)
If (Left$(Feld1, 2) = "<<") And (Right$(Feld1, 2) = ">>")
Feld1 = Mid$(Feld1, 3, Len(Feld1) - 4)
MessageBox(Feld1, "Codeübersetzung", 0)
Else
Feld1 = Translate$(Feld1, ".", "~.")
Feld1 = Translate$(Feld1, "[", "~[")
Feld1 = Translate$(Feld1, "{", "~{")
Feld1 = Translate$(Feld1, "(", "~(")
Feld1 = Translate$(Feld1, "]", "~]")
Feld1 = Translate$(Feld1, "}", "~}")
Feld1 = Translate$(Feld1, ")", "~)")
Feld1 = Translate$(Feld1, "|", "~|")
Feld1 = Translate$(Feld1, "?", "~?")
Feld1 = Translate$(Feld1, "+", "~+")
Feld1 = Translate$(Feld1, "*", "~*")
Feld1 = Translate$(Feld1, "^", "~^")
Feld1 = Translate$(Feld1, "$", "~$")
Feld1 = Translate$(Feld1, "~", "~~")
Feld1 = "(?i)" + Feld1
EndIf
AddString(SeekList, Feld1)
EndWhile
EndProc
Proc MakeUndoName ' Erstellt einen Namen für die Undodatei
Parameters String File
Declare String Ext, UndoFile
Ext = SubStr$(File, -1, ".")
UndoFile = Left$(File, Len(File) - Len(Ext) - 1) + ".Undo"
Case Upper$(File) = Upper$(UndoFile) : UndoFile = ""
Return UndoFile
EndProc
Proc ReplaceProc ' Erstellt Undodatei und führt dann das Suchen-Ersetzen aus
' und erstellt neue Datei mit den Änderungen
Parameters Int Zahl, Max, String File, UndoFile
Declare String Zeile, OutZeile, Feld1, Feld2
TextMalen Zahl, Max, "Ersetzen"
' File umbenennen nach UndoFile
' UndoFile zum lesen öffnen und zeilenweise:
' Einlesen
' Ersetzen
' Schreiben nach File
Set("RegEx", 1)
Assign #2, File
Rename #2, UndoFile
Assign #2, File
Assign #3, UndoFile
Reset #3
ReWrite #2
WhileNot Eof(#3)
Input #3, Zeile
WhileLoop GetCount(Grid)
Feld1 = GetString$(SeekList, &loop - 1)
Feld2 = SubStr$(GetString$(Grid, &loop - 1), 2, "|") 'GetText$(Grid, &loop - 1, 2)
Zeile = Translate$(Zeile, Feld1, Feld2)
EndWhile
Print #2, Zeile
EndWhile
Close #2
Close #3
Set("RegEx", 0)
EndProc
Proc DoFileReplace ' Ersetzen entsprechend der Wertepaare in Eingangsdatei
Declare String File, UndoFile
MakeSeekList
WhileLoop GetCount(FileList)
File = GetString$(FileList, &loop - 1)
UndoFile = MakeUndoName(File)
If UndoFile <> ""
ReplaceProc &loop, GetCount(FileList), File, UndoFile
EndIf
EndWhile
TextMalen 0, 0, "Fertig"
EndProc
Proc DoFileUndo
Declare String File, UndoFile
WhileLoop GetCount(FileList)
File = GetString$(FileList, &loop - 1)
UndoFile = MakeUndoName(File)
If UndoFile <> ""
If FileExists(UndoFile)
TextMalen &loop, GetCount(FileList), "Undo"
' File löschen und UndoFile in File umbenennen
If FileExists(File)
Assign #2, File
Erase #2
EndIf
Assign #2, UndoFile
Rename #2, File
EndIf
EndIf
EndWhile
TextMalen 0, 0, "Fertig"
EndProc
Proc UndoEnable
Declare String File, UndoFile
WhileLoop GetCount(FileList)
File = GetString$(FileList, &loop - 1)
UndoFile = MakeUndoName(File)
If UndoFile <> ""
If FileExists(UndoFile)
EnableWindow UndoBtn, 1
BREAK
EndIf
EndIf
EndWhile
EndProc
Proc ButtonSet ' Enablen der Controls abhängig vom Status
Var Int L1 = Len(GetText$(SeekEdit))
Var Int L2 = Len(GetText$(ReplaceEdit))
Var Int Sek = SendMessage(SeekEdit, $B8, 0, 0) And L1
Var Int Repl = SendMessage(ReplaceEdit, $B8, 0, 0) And L2
Var Int Ch = (L1 <>0) & (L2 <> 0) & (SendMessage(SeekEdit, $B8, 0, 0) | SendMessage(ReplaceEdit, $B8, 0, 0))
EnableWindow SaveBtn, GetCount(Grid)
EnableWindow AddBtn, Sek & Repl
EnableWindow ChangeBtn, Ch & (GetCurSel(Grid) > -1)
EnableWindow DelBtn, GetCurSel(Grid) > -1
If GetCount(FileList)
Case IsUndo = 0 : EnableWindow StartBtn, GetCount(Grid)
EndIf
EndProc
Proc GetPar
Declare String Par
WhileLoop NoExe, %parcount
Par = Par$(&loop)
If Upper$(Par) = "-UNDO"
IsUndo = 1
ElseIf Upper$(Par) = "/UNDO"
IsUndo = 1
ElseIf &loop > NoExe
AddString(FileList, Par)
EndIf
EndWhile
Return GetCount(FileList)
EndProc
Proc GetParDlg
Declare String Path, File
Var Int Substr = 1
Var String Par = LoadFile$(%hwnd, "Zu bearbeitende Datei(en) wählen", "*.*", 1)
If Par <> ""
If InStr("|", Par)
Path = SubStr$(Par, Substr, "|")
Inc Substr
File = SubStr$(Par, Substr, "|")
While File <> ""
AddString(FileList, Path + File)
Inc Substr
File = SubStr$(Par, Substr, "|")
EndWhile
Else
AddString(FileList, Par)
EndIf
EndIf
EndProc
Proc GetParams
Var String Par = Upper$(Par$(0))
If InStr("PRFRUN32.EXE", Par) | InStr("PROFAN.EXE", Par)
NoExe = 1
'Programm ist keine EXE
Else
NoExe = 0
'Programm ist EXE
EndIf
IfNot GetPar()
GetParDlg
EndIf
Par = ""
WhileLoop GetCount(FileList)
Case Par <> "" : Par = Par + Chr$(13)
Par = Par + GetString$(FileList, &loop-1)
EndWhile
EndProc
WindowTitle "Batchersetzen"
WindowStyle 538
Window 480, 488
Cls ~GetSysColor(~Color_InfoBK)
UseFont "ARIAL", 16, 0, 0, 0, 0
SetDialogFont ~GetStockObject(~Ansi_Var_Font)
GetParams
CreateObjects
UndoEnable
WhileNot Ende
ButtonSet
WaitInput
If %key = 2
Ende = 1
ElseIf Clicked(LoadBtn)
LoadList
ElseIf Clicked(SaveBtn)
SaveList
ElseIf Clicked(StartBtn)
DoFileReplace
ElseIf Clicked(AddBtn)
DoAdd
ElseIf Clicked(ChangeBtn)
DoChange
ElseIf Clicked(DelBtn)
DoDelete
ElseIf Clicked(UndoBtn)
DoFileUndo
ElseIf Clicked(Grid)
Case GetCount(Grid) : GridSel
EndIf
EndWhile
Ersetzungsliste: Ist in einer Datei mit der Erweiterung *.LST (für Liste) gespeichert, es kann also beliebig viele Listen geben. Mit "Laden" wird eine Liste geladen und angezeigt und mit "Speichern" kann die Liste gespeichert werden. In die beiden Editfelder unter der Liste wird dann Begriffspaar eingetragen und dann mit "Hinzufügen" hinten an der Liste angehängt. Bei Auswahl einer Zeile der Liste erscheinen die beiden Begriffe in den Editfeldern. Mit "Löschen" wird die Zeile ohne Rückfrage gelöscht. Werden Änderungen vorgenommen, sind "Hinzufügen" und "Ändern" verfügbar. "Hinzufügen" fügt die Änderungen als neue Zeile hinten an und "Ändern" übernimmt die Änderungen in die ausgewählte Zeile. Danach sollte die Liste wieder gespeichert werden, um sie später verfügbar zu haben. Das Erstellen und Bearbeiten einer Ersetzungsliste ist jederzeit möglich. Es muß keine zu durchsuchende Datei gewählt sein. Die Suche ignoriert Groß-Kleinschreibung, ersetzt wird der Ausdruck wie angegeben. Als Suchbegriff sind auch reguläre Ausdrücke erlaubt, diese müssen dann in doppelten <<spitzen Klammern>> gesetzt sein. Dies ist notwendig, um eine Unterscheidung zu haben. Die Behandlung von Groß-Kleinschreibung muß dann durch den regulären Ausdruck selbst behandelt werden. Das Programm kann auch Standalone verwendet werden. In diesem Falle wird beim Starten ein Dateidialog geöffnet. Hier ist es dann sogar möglich, mehrere Dateien zu wählen, die dann in einem Durchlauf behandelt werden. Es sollten keine Dateien gewählt werden, die bereits im Editor geöffnet sind, da hier die Tabs nicht neu geladen werden. Hinweis zum Rückgängig machen: Es ist in jedem Falle die zu bearbeitende Datei zu wählen, nicht die Undo-Datei. Der Button "Rückgängig" ist immer dann verfügbar, wenn für mindestens eine gewählte Datei eine Undo-Datei existiert. Die Undo-Datei ist immer die Originaldatei vor der Änderung. Eine bereits vorhandene Undo-Datei wird dabei überschrieben. Rückgängig wäre damit auch jederzeit im Explorer möglich. Gruß Volkmar |
|
|
|
|
|
#20 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Schöner Democode, Volkmar!
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#21 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Sorry , daß ich mich so spät melde.
Habe das Programm gleich mal ins Benutzermenü und die Werkzeuge integriert . Danke schön Volkmar |
|
|
|
|
|
#22 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Freut mich, wenn's Dir hilft.
Gruß Volkmar |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| InfoRapid Suchen & Ersetzen 3.1f | Paule | 2.) Nachschlagewerke und Wörterbücher | 0 | 03.03.2010 02:40 |
| 32 durch 64 Bit ersetzen | X5-599 | Windows Vista | 2 | 08.02.2009 13:53 |
| Festplatte ersetzen | jochem | Windows Vista | 14 | 28.10.2008 21:17 |
| Javascript Funktion in Funktion ausführen. | ELeX | Sonstige Programmiersprachen | 1 | 13.03.2008 17:25 |
| Excel Formeln Suchen Ersetzen | Der-Commander | Office-Anwendungen | 10 | 09.09.2005 12:56 |