WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Software

Software Rat & Tat bei Softwareproblemen

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 17.07.2004, 11:16   #1
Kasparov
Veteran
 
Registriert seit: 07.07.2002
Ort: Wien
Alter: 52
Beiträge: 251


Standard Word: VB "suchen & ersetzen" für Fortgeschrittene

Liebe Gemeinde,

nomen est omen: ich würde gerne einen sehr langen Text mit englischer Schachnotation in deutsche umwandeln, z.B. "21.Qh4 Ne3" in "21.Dh4 Se3".

Also ein Makro: suche nach .Q und ersetze mit .D
so weit, so gut.

Dabei zwei Probleme:

1. Was mache ich mit solchen Sachen wie dem zweiten Teil (Ne3)? Da kann ich nicht einfach "finde N" und "ersetze mit S" sagen, denn wenn z.B. ein Spieler namens "Nemo" oder woswasi auch im Text steht, wäre der nach Makro ein "Semo" und das ist ja auch unschön.

2. Manchmal kommt im Text auch "21. Ka3" (also mit Abstand) vor, genau so wie Kommentare "Satz aus. Karl meint ..." wobei wieder die Suche nach ". K" nix bringt.

Fazit:

Am besten wäre wohl:
ersetze alle N<a bis h><1 bis 8> durch S<a bis h><1 bis 8> (Springer)
ersetze alle B<a bis h><1 bis 8> durch L<a bis h><1 bis 8> (Läufer)
ersetze alle R<a bis h><1 bis 8> durch T<a bis h><1 bis 8> (Turm)
ersetze alle Q<a bis h><1 bis 8> durch T<a bis h><1 bis 8> (Dame)

Nur wie gehts?

Besten Dank im Voraus an alle Visual Basic Experten!!!
____________________________________
***************************************
Schnell muß er nicht sein, aber stabil!
Kasparov ist offline   Mit Zitat antworten
Alt 17.07.2004, 13:14   #2
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Welche Version verwendest du (4,5,6)?

Ich würde mit Split den Text(=Notation) in einzlen Wörter teilen (das Leerzeichen trennt) und danach alle Wörter(=den Array) mit Länge 3 nach deinem Muster umwandeln, eventuell auch 4erNotationen einbeziehen (Tae8). Vielleicht vorher überprüfen, ob der erste Teil ein Großbuchsatbe, der letzte Teil des Wortes eine Zahl ist(ASCII)...

Array = Split(Schachnotation, " ") ' Leerzeichen als Trennzeichen
reemrev ist offline   Mit Zitat antworten
Alt 17.07.2004, 17:33   #3
Kasparov
Veteran
 
Registriert seit: 07.07.2002
Ort: Wien
Alter: 52
Beiträge: 251


Standard

@reemrev:
Word 2002 SP3

Kapier nicht ganz, was du meinst (bin kein Programmierer). Denke nur dass die Suche nach Wörtern mit 3 Buchstaben nicht funkt da es ja neben der eigentlichen Notation noch eine Menge Kommentare gibt, z.B.:

41.Rf4 Ke5 42.Ra4 Qf3 43.Kh2 Qf2 44.Kh1 Rh4 45.Rh4 Qh4 0-1. Nautiluschess - patc, ICS blitz, 2001.

Wie gesagt, ich hab nicht wirklich Ahnung von Programmieren, aber in der Schule - vor laaaanger laaaaaaaanger Zeit - hab ich mal ein Jahr lang Basic "gelernt". Da kann ich mich dunkel daran erinnern, bestimmte Ausdrücke als Variablen markiert zu haben.

Geht das nicht auch so?:

Für alle a, b, c, d, e, f, g, h setze die Variable X
Für alle 1, 2, 3, 4, 5, 6, 7, 8 setze die Variable Y

Dann suche nach Kombination NXY und ersetze mit SXY (Springer)
Dann suche nach Kombination BXY und ersetze mit LXY (Läufer)
Dann suche nach Kombination RXY und ersetze mit TXY (Turm)
Dann suche nach Kombination QXY und ersetze mit DXY (Dame)
____________________________________
***************************************
Schnell muß er nicht sein, aber stabil!
Kasparov ist offline   Mit Zitat antworten
Alt 17.07.2004, 17:59   #4
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Ups, dachte du machst in VisualBasic, hab' das Word übersehen.
Klar kann man so machen, was passiert aber wenn 2 gleiche Figuren auf ein Feld gestellt werden könnten? Dann hat man einen zusätzlichen Buchstaben in der Notation zb: Tae8, Sed4. Die würden nicht gefunden werden.
reemrev ist offline   Mit Zitat antworten
Alt 17.07.2004, 18:06   #5
Kasparov
Veteran
 
Registriert seit: 07.07.2002
Ort: Wien
Alter: 52
Beiträge: 251


Standard

@ reemrev:

stimmt, das gilt auch für geschlagene Figuren (z.B. Rxe4), aber das könnte man sicher nach dem selben Schema lösen.

Wenn du sagst das ginge so, kannst mir auch verraten, wie genau? Wie gesagt hab ich null Ahnung und müsst demnach ganz genau wissen, was ich dem editor reinklopfen soll
____________________________________
***************************************
Schnell muß er nicht sein, aber stabil!
Kasparov ist offline   Mit Zitat antworten
Alt 17.07.2004, 18:06   #6
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Fällt mir was ein: alle Wörter mit den entsprechenden Großbuchstaben werden geändert, wenn sie eine Zahl enthalten (die >0 und <9 ist). Hab' aber noch nie ein Makro in Word geschrieben...
reemrev ist offline   Mit Zitat antworten
Alt 17.07.2004, 19:33   #7
Kasparov
Veteran
 
Registriert seit: 07.07.2002
Ort: Wien
Alter: 52
Beiträge: 251


Standard

aso, jedenfalls trotzdem danke.
vielleicht sollte ich besser mal bei "Programmieren" statt hier bei Software nachfragen.
____________________________________
***************************************
Schnell muß er nicht sein, aber stabil!
Kasparov ist offline   Mit Zitat antworten
Alt 18.07.2004, 07:15   #8
powerman
gesperrt
 
Registriert seit: 08.06.2002
Alter: 76
Beiträge: 4.263


Standard

hi,
für vba den hilfeassistenten verwenden = f1 oder rechts oben die frage eingeben oder makro öffen...
powerman ist offline   Mit Zitat antworten
Alt 18.07.2004, 11:49   #9
flinx
Inventar
 
Registriert seit: 08.04.2001
Beiträge: 3.101


Standard

Quick & Dirty & ohne Gewehr:
Musst du noch für die anderen Figuren erweitern und den Fall eines Leerraumes einbauen.

Code:
Sub Suchen()
    ActiveDocument.Select
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[1-9].R???[K,Q,R,N,B,S,L,T,D]"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    While Selection.Find.Execute    
    Selection.Text = Replace(Selection.Text, "R", "T", 1, 1)
    Wend
    ActiveDocument.Select
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[1-9].[K,Q,R,N,B,S,L,T,D]???R"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    While Selection.Find.Execute
    Selection.Text = StrReverse(Replace(StrReverse(Selection.Text), "R", "T", 1, 1))
    Wend
End Sub
Edit:
[1-9].R?[1-9]?[K,Q,R,N,B,S,L,T,D] bzw.
[1-9].[K,Q,R,N,B,S,L,T,D]?[1-9]?R
wäre ev. etwas genauer.
flinx ist offline   Mit Zitat antworten
Alt 18.07.2004, 16:27   #10
Kasparov
Veteran
 
Registriert seit: 07.07.2002
Ort: Wien
Alter: 52
Beiträge: 251


Idee danke danke danke

@flinx:

hat zwar so nicht gefunkt, aber ohne deine Hilfe wär ich da in 1000 Jahren nicht draufgekommen. DANKE !!!!

Hab das mal geändert in:

Sub Schach()
ActiveDocument.Select
Selection.Find.ClearFormatting
With Selection.Find
.Text = "[R,Q,N,B]?[1-8]"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
While Selection.Find.Execute
Selection.Text = Replace(Selection.Text, "R", "T", 1, 1)
Selection.Text = Replace(Selection.Text, "Q", "D", 1, 1)
Selection.Text = Replace(Selection.Text, "N", "S", 1, 1)
Selection.Text = Replace(Selection.Text, "B", "L", 1, 1)
Wend
ActiveDocument.Select
Selection.Find.ClearFormatting
With Selection.Find
.Text = "[R,Q,N,B]??[1-8]"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
While Selection.Find.Execute
Selection.Text = Replace(Selection.Text, "R", "T", 1, 1)
Selection.Text = Replace(Selection.Text, "Q", "D", 1, 1)
Selection.Text = Replace(Selection.Text, "N", "S", 1, 1)
Selection.Text = Replace(Selection.Text, "B", "L", 1, 1)
Wend
End Sub


... und das funkt erstklassig!
Einziger Nachteil: es ist irre langsam - woran liegt das?
Und außerdem: kann man auch gleichzeitig nach zwei Texten suchen:
.Text = "[R,Q,N,B]?[1-8]" UND
.Text = "[R,Q,N,B]??[1-8]"
... ist ja sonst das gleiche. Oder brauch ich da die ganze Wurst ein zweites Mal?

Nochmals vielen Dank!!!
____________________________________
***************************************
Schnell muß er nicht sein, aber stabil!
Kasparov ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:31 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag