vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
String 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"
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String in allen Sources des Projektes ändern 
Autor: ModeratorDieter (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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String in allen Sources des Projektes ändern 
Autor: ModeratorDieter (Moderator)
Datum: 15.10.16 14:46

Ja, klar: sBuffer wird ja gar nicht von der Funktion zurückgegeben.
Folgende Zeile fehlt am Ende der Funktion:
Private Function ReadFile(ByVal sFile As String) As String
...
  ReadFile = sBuffer
End Function

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String in allen Sources des Projektes ändern 
Autor: ModeratorDieter (Moderator)
Datum: 15.10.16 15:05

Upps... du musst ReadFile natürlich mit Angabe des Pfades aufrufen:
...
  Do While Len(sFile) > 0
    ' Prüfen, ob in der Datei die gesuchte Zeichenkette vorhanden ist
    sBuffer = ReadFile(sPath & sFile)
Und WriteFile natürlich auch:
...
      WriteFile sPath & sFile, sBuffer
...

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String in allen Sources des Projektes ändern 
Autor: ModeratorDieter (Moderator)
Datum: 16.10.16 09:55

Nur zum Verständnis: die korrekte If Abfrage würde lauten:
If InStr(1, sBuffer, sLookFor, vbTextCompare) > 0 Then
...

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel