Discussion:
Suchen und bedingtes Ersetzen
(zu alt für eine Antwort)
Hans List
2011-07-19 10:21:09 UTC
Permalink
Hallo Leute,

Ich suche ein Makro, das Folgendes leistet:

Wenn ein Paragraph eine bestimmte Zeichenkette A enthält:
- Prüfe, ob der Paragraph einen bestimmten Suchbegriff B enthält.
- Falls ja: ersetze diesen Suchbegriff B durch einen anderen Begriff
C.

Das Ganze sollte in einer riesigen, tab delimited plain text-Datei
laufen.

Ich könnte mir folgende Lösung vorstellen:

1. Schritt: Öffne die Datei in Word.
2. Schritt: Blende alle Zeilen (1 Zeile = 1 Paragraph) aus, welche die
Zeichenkette A nicht enthalten (Font = hidden).
3. Schritt: Manuelles Suchen und Ersetzen (B > C).
4. Schritt: Entferne das Schriftattribut 'Hidden'.

Es gibt aber bestimmt eine schnellere, elegantere Lösung ;).

Hier noch ein Beispiel:

Die Liste sieht so aus:

Gewindeschraube[tab]screw
Gewindestange[tab]screw
Gewindeschrauben[tab]screws
Gewindestangen[tab]screws

Aufgabe: Die Begriffe 'screw' und 'screws' sollen durch 'bolt' und
'bolts' ersetzt werden, aber nur in Zeilen (Absätzen) mit
'GewindeSTANGE'.

Besten Dank für Euere Hilfe!

Hans
Wolfram Jahn
2011-07-21 22:11:51 UTC
Permalink
Post by Hans List
Hallo Leute,
Hier ist es, aber in Word öffnen ist überflüssig:

-Makro------------------
Sub hans2(A, B, C)
Dim fso As New FileSystemObject
Dim Zeilen, i
Dim Datei

Datei = fso.BuildPath("c:\", "Hans.txt")
Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf)

For i = 0 To UBound(Zeilen)
If InStr(Zeilen(i), A) > 0 Then Zeilen(i) = Replace(Zeilen(i), B, C)
Next i

Datei = fso.BuildPath("c:\", "Hans2.txt")
fso.OpenTextFile(Datei, ForWriting, True).Write Join(Zeilen, vbCrLf)

End Sub

-c:\hans.txt------------------
Gewindeschraube[tab]screw
Gewindestange[tab]screw
Gewindeschrauben[tab]screws
Gewindestangen[tab]screws

-Aufruf in VBA Direktbereich------------------
hans2 "Gewindestange","screw","bolt"

-c:\hans2.txt------------------
Gewindeschraube[tab]screw
Gewindestange[tab]bolt
Gewindeschrauben[tab]screws
Gewindestangen[tab]bolts

-Wolfram-------------------
Hans List
2011-08-30 13:20:35 UTC
Permalink
Hallo Wolfgang,

besten Dank für Deine Hilfe (und bitte entschuldige die verzögerte
Antwort)!

Welchen 'Verweis' (oder wie das auf Deutsch auch immer heißt) muss ich
unter "Extra"/"Tools" ankreuzen, damit ein FileSystemObject erstellt
wird?

Gruß

Hans
Post by Wolfram Jahn
Post by Hans List
Hallo Leute,
-Makro------------------
Sub hans2(A, B, C)
Dim fso As New FileSystemObject
Dim Zeilen, i
Dim Datei
Datei = fso.BuildPath("c:\", "Hans.txt")
Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf)
For i = 0 To UBound(Zeilen)
     If InStr(Zeilen(i), A) > 0 Then Zeilen(i) = Replace(Zeilen(i), B, C)
Next i
Datei = fso.BuildPath("c:\", "Hans2.txt")
fso.OpenTextFile(Datei, ForWriting, True).Write Join(Zeilen, vbCrLf)
End Sub
-c:\hans.txt------------------
Gewindeschraube[tab]screw
Gewindestange[tab]screw
Gewindeschrauben[tab]screws
Gewindestangen[tab]screws
-Aufruf in VBA Direktbereich------------------
hans2 "Gewindestange","screw","bolt"
-c:\hans2.txt------------------
Gewindeschraube[tab]screw
Gewindestange[tab]bolt
Gewindeschrauben[tab]screws
Gewindestangen[tab]bolts
-Wolfram-------------------
Wolfram Jahn
2011-08-30 19:27:02 UTC
Permalink
Post by Hans List
Hallo Wolfgang,
Welchen 'Verweis' (oder wie das auf Deutsch auch immer heißt) muss ich
unter "Extra"/"Tools" ankreuzen, damit ein FileSystemObject erstellt
wird?
Hallo Horst :)

nimm

Microsoft Scripting Runtime


WolfRAM

Lesen Sie weiter auf narkive:
Loading...