none
Regular Expression: Search & Replace

    Frage

  • Hallo zusammen,
    ich bräuchte einen heißen Tipp oder Denkanstoß, denn scheinbar sehe ich den Wald vor lauter Bäumen nicht...

    Also, ich habe ca. 2.000 XML-Files. In diesen 2.000 XML-Files findet sich (auch mehrfach in den XML-Files) folgende beispielhafte Zeile, an einer immer unterschiedlichen Stelle:

    <Categories>MSDN;TechNet;Windows;Zum MSDN Forum;Zune</Categories>

    Die Werte sind immer mit einem ";" getrennt und befinden sich in aliphatischer Reihenfolge im Tag.

    Ich suche jetzt eine Möglichkeit, per Search & Replace beispielsweise das Wort TechNet gegen das Wort "Beispiel" oder die Phrase "Beispiel Einträge" auszutauschen. Die anderen Wörter innerhalb des Tags dürfen dabei nicht berührt oder verändert werden.

    Ich finde irgendwie nicht den richtigen Ansatz, sei es mit welchem Tool ich dies machen könnte, noch wie die Regular Expression aussehen könnte.

    Für eine Idee oder Verschläge dazu, wäre ich sehr dankbar!
    Viele Grüße,
    Kay


    This post is powered by www.Giza-Blog.de | Sie besuchen MSDN heute zum ersten Mal?
    MSDN Online | Follow MSDN Online on Twitter | Follow Kay Giza on Twitter
    Tagesaktuelle News & Infos für Entwickler finden Sie auf MSDN Aktuell
    ~~ So melden Sie Forum-Probleme, -Bugs oder -Verbesserungsvorschläge ~~
    Samstag, 9. Oktober 2010 10:40
    Besitzer

Antworten

  • Du suchst nicht zufällig \b als Wortbegrenzer? Dürfte dann so aussehen: \bTechnet\b - und als Tool könntest Du ja Visual Studio samt einer kleinen selbstgeschriebenen Konsole-App einsetzen. ;-)
    Samstag, 9. Oktober 2010 11:37
  • Hallo,

    aus meiner Sicht wäre es mit einer kleinen Konsolenanwendung schnell gemacht. LinqToXML --> String.Split(';') --> String.Replace("alt","neu")
    Dafür braucht man dann eigentlich keine reguläres Ausdrücke.

    Grüße,
    Jan

    Samstag, 9. Oktober 2010 11:42
  • Hallo Kay,

    Nur damit ich dich richtig verstehe…

    Du möchtest zum Beispiel:

    <Categories>MSDN;TechNet;Windows;Zum MSDN Forum;Zune</Categories>

    gegen;

    <Categories>MSDN;TechNet;Windows;Office;Windows Phone;etc</Categories>

    Wenn ja, so mache ich es beinahe wöchentlich:

    Ich verwende FrontPage 2003 (SharePoint Designer wird auch gehen) dazu uns zwar seit Jahren...

    Habe auch selber mehrere Blogs und ab und zu muss was geändert werden. Dazu Lade ich den Ordner mit den XML Files herunter, Importiere es in einem Web (damit ich es in FrontPage bearbeiten kann) dann einfach Suchen und Ersetzen wie beim Word.

    Funktioniert einwandfrei...

    lg

    Valdet

    Samstag, 9. Oktober 2010 11:49
  • Hallo Kay,

    Kay Giza [MSFT] wrote:

    Also, ich habe ca. 2.000 XML-Files. In diesen 2.000 XML-Files findet
    sich (auch mehrfach in den XML-Files) folgende beispielhafte Zeile, an
    einer immer unterschiedlichen Stelle:

    Falls du Lust hast, mal Access zu benutzen ;-) (geht aber auch mit jeder
    Anwendung, die VBA unterstuetzt):

    VBE starten, Standardmodul erstellen, folgenden Code reinkopieren:

    Sub AlleErsetzen()
      Dim I          As Long
      Dim strFolder  As String
      Dim strFile    As String
      Dim strTemp    As String
      Dim strFind    As String
      Dim strReplace As String
    
      strFolder = "C:\Temp\"
      strFind = "TechNet"
      strReplace = "Beispiel Einträge"
    
      strFile = Dir(strFolder & "*.xml")
    
      Do While strFile <> ""
    
        Open strFolder & strFile For Input As #1
        Open strFolder & strFile & "tmp" For Output As #2
        Print #2, Replace(Input(LOF(1), 1), strFind, strReplace)
        Close #1, #2
    
        Kill strFolder & strFile
        Name strFolder & strFile & "tmp" As strFolder & strFile
    
        strFile = Dir
    
      Loop
      MsgBox "Done."
    End Sub

    Gruss - Peter


    Peter Doering [MVP Access]
    Bamberg, Germany

    Montag, 11. Oktober 2010 14:02

Alle Antworten

  • Du suchst nicht zufällig \b als Wortbegrenzer? Dürfte dann so aussehen: \bTechnet\b - und als Tool könntest Du ja Visual Studio samt einer kleinen selbstgeschriebenen Konsole-App einsetzen. ;-)
    Samstag, 9. Oktober 2010 11:37
  • Hallo,

    aus meiner Sicht wäre es mit einer kleinen Konsolenanwendung schnell gemacht. LinqToXML --> String.Split(';') --> String.Replace("alt","neu")
    Dafür braucht man dann eigentlich keine reguläres Ausdrücke.

    Grüße,
    Jan

    Samstag, 9. Oktober 2010 11:42
  • Hallo Kay,

    Nur damit ich dich richtig verstehe…

    Du möchtest zum Beispiel:

    <Categories>MSDN;TechNet;Windows;Zum MSDN Forum;Zune</Categories>

    gegen;

    <Categories>MSDN;TechNet;Windows;Office;Windows Phone;etc</Categories>

    Wenn ja, so mache ich es beinahe wöchentlich:

    Ich verwende FrontPage 2003 (SharePoint Designer wird auch gehen) dazu uns zwar seit Jahren...

    Habe auch selber mehrere Blogs und ab und zu muss was geändert werden. Dazu Lade ich den Ordner mit den XML Files herunter, Importiere es in einem Web (damit ich es in FrontPage bearbeiten kann) dann einfach Suchen und Ersetzen wie beim Word.

    Funktioniert einwandfrei...

    lg

    Valdet

    Samstag, 9. Oktober 2010 11:49
  • Hallo Kay,

    Nur damit ich dich richtig verstehe…

    Du möchtest zum Beispiel:

    <Categories>MSDN;TechNet;Windows;Zum MSDN Forum;Zune</Categories>

    gegen;

    <Categories>MSDN;TechNet;Windows;Office;Windows Phone;etc</Categories>

    Wenn ja, so mache ich es beinahe wöchentlich:

    Ich verwende FrontPage 2003 (SharePoint Designer wird auch gehen) dazu uns zwar seit Jahren...

    Habe auch selber mehrere Blogs und ab und zu muss was geändert werden. Dazu Lade ich den Ordner mit den XML Files herunter, Importiere es in einem Web (damit ich es in FrontPage bearbeiten kann) dann einfach Suchen und Ersetzen wie beim Word.

    Funktioniert einwandfrei...

    lg

    Valdet


    Hallo Valdet,
    vielen Dank!
    ja - genau - wobei die Zeile halt nicht immer die gleiche ist. <Categories>Immer unterschiedlicher Inhalt</Categories>
    Daher kann ich das ja leider nicht genau machen. Es befinden sich tausende verschiedene Varianten dort drin; ich will dann aber immer nur ein Wort mit einem anderen ersetzen, egal was drum herum steht.

    Viele Grüße,
    Kay
    This post is powered by www.Giza-Blog.de | Sie besuchen MSDN heute zum ersten Mal?
    MSDN Online | Follow MSDN Online on Twitter | Follow Kay Giza on Twitter
    Tagesaktuelle News & Infos für Entwickler finden Sie auf MSDN Aktuell
    ~~ So melden Sie Forum-Probleme, -Bugs oder -Verbesserungsvorschläge ~~
    Samstag, 9. Oktober 2010 12:33
    Besitzer
  • Hallo Karsten & Jan,
    vielen Dank. Also - vielen Dank. Verstanden.

    Interessant, also VS dafür zu nutzen, bin ich nie (wirklich) auf die Idee gekommen, für so einfache Dinge. Nutzte bisher für so was immer http://www.funduc.com/search_replace.htm. Damit probierte ich es die ganze Zeit. (Siehe auch: http://www.funduc.com/regexpd.htm).

    Danke für die Hinweise. Ich probiere es am WOchenende noch mal hiermit, sonst Montag mit VS.
    Danke & viele Grüße,
    Kay


    This post is powered by www.Giza-Blog.de | Sie besuchen MSDN heute zum ersten Mal?
    MSDN Online | Follow MSDN Online on Twitter | Follow Kay Giza on Twitter
    Tagesaktuelle News & Infos für Entwickler finden Sie auf MSDN Aktuell
    ~~ So melden Sie Forum-Probleme, -Bugs oder -Verbesserungsvorschläge ~~
    Samstag, 9. Oktober 2010 12:44
    Besitzer
  • Hallo Kay,

    Kay Giza [MSFT] wrote:

    Also, ich habe ca. 2.000 XML-Files. In diesen 2.000 XML-Files findet
    sich (auch mehrfach in den XML-Files) folgende beispielhafte Zeile, an
    einer immer unterschiedlichen Stelle:

    Falls du Lust hast, mal Access zu benutzen ;-) (geht aber auch mit jeder
    Anwendung, die VBA unterstuetzt):

    VBE starten, Standardmodul erstellen, folgenden Code reinkopieren:

    Sub AlleErsetzen()
      Dim I          As Long
      Dim strFolder  As String
      Dim strFile    As String
      Dim strTemp    As String
      Dim strFind    As String
      Dim strReplace As String
    
      strFolder = "C:\Temp\"
      strFind = "TechNet"
      strReplace = "Beispiel Einträge"
    
      strFile = Dir(strFolder & "*.xml")
    
      Do While strFile <> ""
    
        Open strFolder & strFile For Input As #1
        Open strFolder & strFile & "tmp" For Output As #2
        Print #2, Replace(Input(LOF(1), 1), strFind, strReplace)
        Close #1, #2
    
        Kill strFolder & strFile
        Name strFolder & strFile & "tmp" As strFolder & strFile
    
        strFile = Dir
    
      Loop
      MsgBox "Done."
    End Sub

    Gruss - Peter


    Peter Doering [MVP Access]
    Bamberg, Germany

    Montag, 11. Oktober 2010 14:02