| |
Visual-Basic EinsteigerString in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 15.10.16 09:00 |
| Hallo zusammen,
ich werde demnächst eine neue Version des Softwareproduktes List&Label
einsetzen. Dazu müssen Verweise, wie unten angeführt, in über 100 Forms
angepasst werden. Gibt es eine Möglichkeit, den SOURCE des ganzen Projektes
zu lesen und die betroffenen Zeilen anzupassen? Ich möchte nicht jede einzelne
Form separat aufrufen müssen
Danke
Rainer
Object = "{2B7D38A0-4385-47BE-9345-29F96556FB3D}#1.0#0"; "cmll17fx.ocx" | |
Re: String in allen Sources des Projektes ändern | | | Autor: Dieter (Moderator) | Datum: 15.10.16 12:46 |
| Das geht mit ein wenig "Aufwand" - aber doch relativ einfach.
Neues Projekt mit Command-Schaltfläche und folgendem Code
Private Sub Command1_Click()
Dim sFile As String
Dim sPath As String
Dim sBuffer As String
Dim sLookFor As String
Dim sReplaceWith As String
' Nach dieser Zeichenkette soll gesucht werden
sLookFor = "Object = ""{2B7D38A0-4385-47BE-9345-29F96556FB3D}#1.0#0"";" & _
"""cmll17fx.ocx"""
' Und das soll die neue Zeichenkette sein
sReplaceWith = "..."
' Hier den Pfad zu dem Verzeichnis angeben, in
' dem sich die FRM-Dateien des Projekts befinden
sPath = "D:\temp\"
sFile = Dir$(sPath & "*.frm")
Do While Len(sFile) > 0
' Prüfen, ob in der Datei die gesuchte Zeichenkette vorhanden ist
sBuffer = ReadFile(sFile)
If InStr(1, sFile, sLookFor, vbTextCompare) > 0 Then
' Zeichenkette ersetzen
sBuffer = Replace(sBuffer, sLookFor, sReplaceWith, , , vbTextCompare)
WriteFile sFile, sBuffer
End If
sFile = Dir$
Loop
End Sub
Private Function ReadFile(ByVal sFile As String) As String
Dim F As Integer
Dim sBuffer As String
F = FreeFile
Open sFile For Binary As #F
sBuffer = Space$(LOF(F))
Get #F, , sBuffer
Close #F
End Function
Private Sub WriteFile(ByVal sFile As String, ByVal sBuffer As String)
Dim F As Integer
F = FreeFile
Open sFile For Output As #F
Print #F, sBuffer;
Close #F
End Sub Achtung! Habe den Code nicht getestet - einfach so aus dem Kopf heraus geschrieben.
Du solltest in jedem Fall vorher alle Dateien sichern !!!
_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de | |
Re: String in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 15.10.16 13:59 |
| Hi Dieter,
super, danke. Ich werden den Code gleich über das Wochenende testen.
Gruss
Rainer | |
Re: String in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 15.10.16 14:44 |
| Hallo Dieter,
irgendwo ist da noch der Wurm drin. In der Function ReadFile kommt im
sBuffer immer der Wert "".
Wohl als Folge davon kommt bei If Instr(1, ... immer der Returnwert 0
und deshalb wird nicht replaced.
Ich sehe momentan keinen Fehler in "ReadFile" aber ...
Herzlichen Gruss
Rainer | |
Re: String in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 15.10.16 15:01 |
| Hallo Dieter,
das Problem liegt wohl eher beim Inhalt von sBuffer, welcher immer = ""
ist. Somit wird "" an ReadFile übergeben. Sollte sBuffer nicht einen Daten-
string enthalten?
Danke
Rainer | |
Re: String in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 15.10.16 17:38 |
| Hallo Dieter,
ich habe es nun zum Laufen gebracht und das Ersetzen funktioniert tadellos.
Allerdings musste ich die Zeile "If InStr(1, sFile, sLookFor, vbTextCompare) > 0 Then"
ersetzen. Die gab immer den Wert 0 zurück ?! Warum ist mir nicht klar.
Mit der expliziten Abfrage auf die Position geht es aber.
Nochmals vielen Dank für Deine Hilfe.
Rainer
Private Sub btnAbbrechen_Click()
Unload Me
End Sub
Private Sub btnChange_Click()
Dim sFile As String
Dim sPath As String
Dim sBuffer As String
Dim sLookFor As String
Dim sReplaceWith As String
Dim sPos As Long
' ------------------------------------------------------------------------
' Nach dieser Zeichenkette soll gesucht werden
' ------------------------------------------------------------------------
sLookFor = "Object = ""{2B7D38A0-4385-47BE-9345-29F96556FB3D}#1.0#0"";" & _
"""cmll17fx.ocx"""
' ------------------------------------------------------------------------
' Und das soll die neue Zeichenkette sein
' ------------------------------------------------------------------------
sReplaceWith = "Object = ""{2B7D38A0-4385-47BE-9345-29F96556FB3D}#1.0#0"";" & _
""" cmll22fx.ocx"""
'------------------------------------------------------------------------
' Hier den Pfad zu dem Verzeichnis angeben, in dem sich die FRM-Dateien
' des Projekts befinden
' -----------------------------------------------------------------------
sPath = "C:\CT_Frm\"
sFile = Dir$(sPath & "*.frm")
Do While Len(sFile) > 0
'--------------------------------------------------------------------
' Prüfen, ob in der Datei die gesuchte Zeichenkette vorhanden ist
' -------------------------------------------------------------------
sBuffer = ReadFile(sPath & sFile)
sPos = 0
pos = InStr(1, sBuffer, sLookFor, vbTextCompare)
If pos > 0 Then
' If InStr(1, sFile, sLookFor, vbTextCompare) > 0 Then
' ----------------------------------------------------------------
' Zeichenkette ersetzen
' ----------------------------------------------------------------
sBuffer = Replace(sBuffer, sLookFor, sReplaceWith, , , vbTextCompare)
WriteFile sPath & sFile, sBuffer
End If
sFile = Dir$
Loop
MsgBox "Dateien konvertiert"
End Sub
Private Function ReadFile(ByVal sFile As String) As String
Dim F As Integer
Dim sBuffer As String
F = FreeFile
Open sFile For Binary As #F
sBuffer = Space$(LOF(F))
Get #F, , sBuffer
Close #F
ReadFile = sBuffer
End Function
Private Sub WriteFile(ByVal sFile As String, ByVal sBuffer As String)
Dim F As Integer
F = FreeFile
Open sFile For Output As #F
Print #F, sBuffer;
Close #F
End Sub
Private Sub Form_Load()
End Sub | |
Re: String in allen Sources des Projektes ändern | | | Autor: crosstravel | Datum: 16.10.16 10:22 |
| Hallo Dieter,
ich sehe das Problem. Im nachstehenden Command übergebe ich sFile anstelle
von sBuffer - hätte eigentlich darauf kommen sollen.
Danke für den Hinweis und noch einen schönen Sonntag.
Rainer
If InStr(1, sFile, sLookFor, vbTextCompare) > 0 Then
' Zeichenkette ersetzen
sBuffer = Replace(sBuffer, sLookFor, sReplaceWith, , , vbTextCompare)
WriteFile sFile, sBuffer
End If | |
Re: String in allen Sources des Projektes ändern | | | Autor: Move | Datum: 16.10.16 15:39 |
| Hallo Rainer,
Versuch es doch mal mit Notepad++.
Dort hast du die Möglichkeit, bestimmte Ausdrücke nicht nur in einer Datei, sondern auch in allen Dateien eines Verzeichnis auch unter Verwendung von Filtern zu ersetzen... | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|