Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Suchen/Ersetzen via RegExp

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Suchen/Ersetzen via RegExp (8287 mal gelesen)
startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 17. Sep. 2004 13:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich hab' mal versucht Bernd's [bst] RegexReplace für Excel auf ein
Selectionset umzustricken, da ich die Idee ganz nett fand.
Funktioniert aber nur für DTexte ;-)

Ganz unten noch eine kleine Erklärung zum Suchen/Ersetzen,
hier erstmal der Code, vielleicht kanns ja wer mal brauchen:

Code:

'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
Option Explicit

Sub such_ersetz()
  Dim stext As AcadText
  Dim such$, ersetz$
  With ActiveDocument
      such = .Utility.GetString(1, "Suchstring:")
      ersetz = .Utility.GetString(1, "Ersatzstring:")
  End With
  If such = "" Then Exit Sub
  regex_it stext, such, ersetz
End Sub

Sub regex_it(Atext As AcadText, s$, e$)
  Dim sset As AcadSelectionSet, ent As AcadEntity
  Dim regex As New RegExp
  regex.Pattern = s
  'Test the Regex
  On Error Resume Next
  regex.test ""
  If Err.Number <> 0 Then
      MsgBox "Fehler im Ausdruck"
      Exit Sub
  End If
  On Error GoTo 0
 
  Set sset = ActiveDocument.SelectionSets.Add("set01")
  sset.SelectOnScreen
  For Each ent In sset
      If TypeOf ent Is IAcadText Then
        If regex.test(ent.TextString) Then
            ent.TextString = regex.Replace(ent.TextString, e)
        End If
      End If
  Next
  sset.Delete
  Set regex = Nothing
End Sub


Und jetz' noch das Wichtigste, wozu das Ganze nun eigentlich gut sein soll ... ;-)

nice w/e
lg Nancy
--
Text ist komplett written by bst:

Code:

Zur Realisierung wurde die Microsoft VBScript Regular Expressions 5.5 Bibliothek benutzt.

Eine Beschreibung dieser Bibliothek findet sich zur Zeit in:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsobjregexp.asp

In den folgenden Beipielen steht S für den Suchtext, E für den Ersatztext. Die Anführungszeichen dienen der Lesbarkeit und sind nicht Bestandteil des Such- bzw. Ersatztextes. E="" bedeutet, daß der Ersatztext leerzulassen ist.

Löschen von Zeichen:

Die ersten 3 Zeichen löschen
S="^..."
E=""

Dito, aber nur falls es sich um Buchstaben handelt
S="^[a-zA-Z]{3}"
E=""

Die letzen 2 Zeichen löschen
S="..$"
E=""

Dito, aber nur falls das vorletzte Zeichen ein '_' ist:
S="_.$"
E=""

Alles bis zum 2. Strichpunkt löschen
S="^[^;]*;"
E=""

Alles ab dem letzten Strichpunkt löschen
S=";[^;]*$"
E=""

(....)' durch '....' ersetzen, d.h. die Klammern löschen. Man beachte, daß die Klammern Metazeichen sind und deshalb 'escaped' werden müssen.
S="\((.*)\)"
E="$2"

Einfügen von Zeichen:

Am Anfang 'XY_' einfügen
S="^"
E="XY_"

Am Ende '_END' einfügen
S="$"
E="_END"

Nach dem 2. Zeichen '_neu_' einfügen
S="^(..)"
E="$2_neu_"

Vor dem drittletzten Zeichen _neu_ einfügen
S="(...)$"
E="_neu_$2"

Ersetzen von Zeichen:

Punkte durch Kommas ersetzen. Da '.' ein Metazeichen ist, muss seine Sonderbedeutung durch '\.' aufgehoben werden.
S="\."
E=","

Die Zeichenfolge '.2' durch die Zeichenfolge '$1' ersetzen.  Man beachte, daß '$1' hier die Zeichenfolge '$1' ergibt, und nicht den 1.ten geklammerten Parameter. M.E. etwas unglücklich.
S="\.2"
E="$2"

Minimal- versus Maximal-Match:

Hierzu einfach ein weiteres Beispiel. In einer Zelle stehe der Text "Hallo 12, 34, 56, viele Zahlen 789 hier".
Man möchte hier die 1. Zahl in $1 haben, wofür auch immer. Wie's (nicht)? geht:

a) S="^.*(\d*).*$"
"Überraschung, $1 ist leer. Warum? Hier wurden gleich zwei Fehler gemacht.
1. Ein '*' bedeutet 0 oder mehrmals ... - Man beachte die NULL.
2. Der '*' ist 'greedy', i.e. gefräßig. Hier 'matched' '^.*' einfach den ganzen Text, während für '\d*' und '.*$' leider nichts mehr übrig bleibt."

b) S="^.*(\d+).*$"
"Etwas besser, durch das '+' erzwingt man den Match einer Ziffer. Allerdings ist '^.*' immer noch gefräßig, so daß man $1=9, i.e. die letzte Ziffer
der letzen Zahl erhält."

c) S="^.*?(\d+).*$"
Funktioniert, da man via '*?' den gefräßigen '*' überlistet hat. Allerdings geht's noch besser:

d) S="^\D*(\d+).*$"
Hier ist man endlich von dem oft überraschendem, wenn nicht sogar dämlichen '.*' abgekommen welches man ja eigentlich überhaupt nicht haben wollte.

Moral: Bevor man einen '.*' einsetzt sollte man mindestens 3-Mal darüber nachdenken, ob man diesen überhaupt will. Nur meine bescheidene Meinung.

e) S="(\d+)"
"Tut's auch, da RE's auch links-orientiert sind und automatisch der erste passende Match genommen wird.
Im Unterschied zum vorherigen Beispiel, wird hier allerdings nur die 1. Zahl 'gematched', während zuvor die ganze Zelle 'gematched' wurde.Dieses spielt allerdings erst beim Ersetzen eine Rolle."


 


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 17. Sep. 2004 20:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ehm, it's me again,

Nachtrag:

Das ganze ist natürlich recht simpel gestrickt und auch nicht sonderlich
getestet, war also mehr oder weniger nur ein Test/Ansatz.
Für weiterführendes, speziell MText betreffend,
versteck' ich mich aber schonmal besser im nächstbesten Schrank  ;-)

Desweiteren ist hier weniger der Code das A&O, sondern eher der einzugebende 'Suchstring',
im Nachinein erscheint mir der Begriff fast bissel unglücklich, es ist ja kein 'String' in dem Sinne,
sondern eher ein Suchmuster.

Das Ganze steht und fällt also mit den korrekten Eingaben, die ich da untenangehängt hatte.
[übrigens Danke an Bernd Strohhaecker für die Doku und sowieso]

Ich fand' die Möglichkeit des Manipulierens von Texten mittels Regulärer Ausdrücke unter VBA halt einfach mal spannend,
wenn auch nicht grad als 'easy to use' zu bezeichnen ...

However, es gibt ja zu der Geschichte an sich, auch mehr als einige fertige Progs, die viiieeelviel mehr können,
seht's also nur als just for fun/Test und wer Verbesserungsideen hat - gerne.

Sodele, das wollt ich blos mal noch ergänzend zu bereits Geschriebenen loswerden,
achja, sollte in letzter Zeit ein recht 'monologlastiger Eindruck' entstanden sein, ich weiss,
das TF ist woanders ;;-))

Gruss Nancy
--
"This process can check if this value is zero, and if it is, it does something child-like."
- Forbes Burkowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 18. Sep. 2004 00:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Hi Nancy,

> ich hab' mal versucht Bernd's [bst] RegexReplace
Wer ist Bernd? Und was hat der damit zu tun? Fehlt da vielleicht ein Link?

> 'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
Öh, wo ist denn der Verweis?

> sollte in letzter Zeit ein recht 'monologlastiger Eindruck'
> entstanden sein
Geht mir manchmal auch so - die wirklich interessanten Dinge interessieren oft kein Schwein;-)

RegEx ist ein sehr interessantes Thema. In Lisp gibt es nur das verschissene WCMATCH zum suchen - das taugt absolut nix. Vom Ersetzen gar nicht zu reden. In AutoCAD gibt es zwar "Suchen und Ersetzen", das
ist aber eine reine Anwenderfunktion und in Programmen kaum verwendbar.

Ich habe mir vor einiger Zeit mal die Mühe gemacht, die PCRE (Perl Compatible Regular Expressions) über ein ARX/ADS-Modul in Lisp einzubinden und das zur Verfügung zu stellen (lag eine Zeit lang bei Cadwiesel). Hat aber wirklich niemanden auch nur die Bohne interessiert... (PCRE ist eine unter der GNU-PL veröffentliche Bibliothek, die die Regular Expressions, wie man sie aus Perl kennt, zur Verfügung stellt. PCRE wird von vielen Projekten verwendet, z.B. in den Sprachen PHP und Python, im Apache usw. usf. Jedenfalls dachte ich mir, wäre ja auch in AutoLisp brauchbar...)

Regular Expressions sind ein hocheffizientes Werkzeug zur Bearbeitung von Texten im weitesten Sinne. In VB 7 sind sie übrigens eingebaut - natürlich deshalb, weil sie Bestandteil des .NET-Frameworks sind. Ich weiss aber nicht, inwieweit diese VBScript-RegEx kompatibel zu Perl sind. Bedenkt man, dass RegEX deutlich schwieriger zu erlernen sind als z.B. VisualLisp (der Lernaufwand ist höher, da ist nichts dran zu rütteln!), dann macht es wenig Sinn, sich noch mit irgendwelchen "Dialekten" auseinanderzusetzen.

Mein bevorzugter Texteditor "kann" RegEx - aber inkompatibel zu perl und stark vereinfacht. Dinge wie die Greediness und der Kleenesche Stern sind da einfach unter den Tisch gefallen. OK, einfache Dinge sind möglich, aber komplexere Aufgabenstellungen gehen da einfach in die Hose, und ich ärgere mich immer wieder über die Abweichungen vom Perl-Standard. Deine Beispiele sind ja nur der ganz simple Anfang - spätere Aufgabenstellungen könnten z.B. lauten: "(syntaktische) Gültigkeit einer Email-Adresse prüfen" oder "Code Coloring von VBA-Code auf einer HTML-Seite". Das habe ich beides im Einsatz - aber da würde ich mich hüten, von den Perl-Regeln abzuweichen.

> (....)' durch '....' ersetzen, d.h. die Klammern löschen. Man
> beachte, daß die Klammern Metazeichen sind und deshalb 'escaped'
> werden müssen.
> S="\((.*)\)"
> E="$2"

Da zum Beispiel. Nach den Perl-Regeln müsste der Text innerhalb der Klammern $1 sein (die äußeren Klammer bilden ja keine Gruppe, da sie Literale sind). Spielt da Option Base eine Rolle? Oder: Wenn das $2 ist, was ist dann $1? Und was ist $0? (normalerweise - also in perl - ist $0 der zu durchsuchende Text selber, und $1 die erste, äußerste Gruppe, hier also der Inhalt der Klammern)

Fragen über Fragen. Ich weiss bisher nicht mal, ob die RegEX im Framework halbwegs 'kompatibel' sind. Hab's bisher nicht ausprobiert. Das wäre ungefähr so: Du machst den Führerschein, aber in jedem Landkreis gelten andere Verkehrsregeln und -schilder. Alles zwar ähnlich, aber zahlen musst du praktisch an jeder Kreuzung;-)

Vielleicht weiss ja wer, ob der internationale RegEx-Führerschein auch im Landkreis "VBScript RegEx 5.5" gilt?

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 18. Sep. 2004 13:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Axel,

puhhh, Du bist ja wiewohl schon sehr tief in die Materie eingetaucht,
was ich von mir nun nicht gerade behaupten kann.
Dementsprechend 'flach' fällt wohl auch mein Reply im Endeffekt aus.

Von Perl hab' ich absolut keinen Plan, von daher kann ich nix zu den
Feinheiten & Unterschieden sagen. Die RegEx' an sich sind schon ein mächtiges
Werkzeug, aber eben auch hammermässig schwierig.
Ich hab' mich da bisher auch nur auf die einfachsten Sachen beschränkt,
wie halt wenn man mal fix paar dTexte ändern will, daher der Versuch das
mal ganz bescheiden anzutesten.
So komplexe Dinge wie Du beschrieben hast, hab' ich noch gar nicht auch
nur ansatzweise versucht, bin von daher auch noch nicht an die Grenzen
gestossen.

Schade jetz such ich schon geraume Zeit, es gab mal im Offtopic-Bereich auf
Herber.de einen Thread zu RegEx wo einige Links zusammengetragen waren,
scheint aber irgendwie gelöscht, jedenfalls find' ichs nimmer.

Hab' zum Thema jetz blos mal den noch: http://jenda.krynicky.cz/#Jenda.Rex
[edit]Ich hab dieses aber noch nicht probiert;-)[/edit]

Wg. Bernd, wenn der Bursche;-) mal eine HP hätte, hätte ich ja nen Link gesetzt,
so war der Text einfach aus einer xl-Datei von Ihm rauskopiert.

>> 'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
> Öh, wo ist denn der Verweis?

Axel, jetz steh' ich aber im Wald, was meinst Du damit?

lg Nancy 

[Diese Nachricht wurde von startrek am 18. Sep. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 18. Sep. 2004 17:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

> >> 'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
> > Öh, wo ist denn der Verweis?
> Axel, jetz steh' ich aber im Wald, was meinst Du damit?

Damit meinte ich, dass es unter VB(A) doch nicht reicht, nur einen Kommentar einzufügen, um auf etwas zu verweisen:

> 'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
Muss dann da nicht so was kommen?
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type

Ich habe übrigens diese PCRE-Geschichte geschrieben, um in AutoCAD Maßtexte zu verändern. Zum Beispiel schreibt ja AutoCAD, wenn es um tolerierte Maße geht, immer beide Toleranzen, auch wenn eine davon 0 beträgt, also 555.0 +0.1 -0.0 (natürlich hoch-und tiefgestellt). Das -0.0 unten ist aber a) unzulässig und b) verwirrend. Mit Acad allein kriegt man's aber nicht wirklich weg. RegEx über die Zeichnung fahren und alle Bemaßungen anpassen, fertig.

Gruß, Axel Strube-Zettler

<edit>
Ach ja, auf dieser Jenda-Seite fiel mir gleich das hier ins Auge:
> The Microsoft VBScript Regular Expressions (5.5) object is funny at
> best. It is hard to use, leads to lengthy code and really looks like
> something a VB "programmer" made.
Hab ich doch gleich vermutet;-)
</edit>

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 18. Sep. 2004 20:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

> Damit meinte ich, dass es unter VB(A) doch nicht reicht,
> nur einen Kommentar einzufügen, um auf etwas zu verweisen.

Ahso  - nun, ich hielt es für wesentlich gesünder dem geneigten Tester einen Hinweis
zu geben, wo ein Haken zu machen ist, als dass ich erstmal jemandes System verwirre, nur weil trekkie mal versucht hat, eine Lib automatisch laden.
Jaja, hier sindse wieder die vba-kiddies, keine Ahnung wie se 'ne DLL korrekt aufrufen,
ich geh' dann mal besser Schleudereuter spielen ;-)

Okay - ernsthaft, ich versuch' mal zu beschreiben, wie ich das sehe:

Die M$ RegEx'Lib ist für simple Sachen, zB wie setze ich meine ganzen DTexte in Klammern?,
oder wie entferne ich alles ab irgendeinem Zeichen? uä triviale Dinge, denke mal durchaus zu gebrauchen.

Über MText der vielleicht sogar noch formatiert ist, etwa:
Textstring = string1 & "\P{\H0.75x;" & string2 & "\P" & string3 & "}"
hab' ich jetz mal noch garnicht weiter drüber nachgedacht.

Sobald's denn also etwas komplizierter wird bzw. was die Perl-Freaks betrifft sowieso,
hast Du sicher recht bzw. ist die 'Jenda-Aussage' völlig zutreffend.
Ich mein da setzt sich ja nicht umsonst einer hin und schreibt sich das 1x neu,
wenn das M$Dingens auch nur halbwegs perfekt wäre ?

Ja und warum das Ganze an sich recht wenige interessiert?
Gute Frage, nächste Frage ;-)
Keine 'wirkliche' Ahnung, ich vermute einfach mal, weil's halt doch nicht ganz so einfach ist,
und nicht jeder sich parallel mit Perl oä auskennt.
Die meisten haben ja 'ihr' Werkzeug für Autocad, entweder Lisp oder halt VBA, oder vielleicht
auch beides. Und Acad ist ja keine Textverarbeitung in dem Sinne und nicht jeder ist hauptberuflich Programmierer.
Gut möglich also, dass diese kryptische Syntax einfach mal brutal abschreckt, wenn sie auch höchstelegant ist.
Is aber nur eine Vermutung ;-)

lg Nancy
--
God is real - until declared integer.

[Diese Nachricht wurde von startrek am 18. Sep. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 18. Sep. 2004 21:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Abschreckend isses, ja. Das hier ist der Suchstring, mit dem ich in Lisp Maßtexte aufspüre, deren obere Toleranz Null ist:

"(\\\\A1;\\d+[,.]?\\d*\\{\\\\H\\d+\\.?\\d*;\\\\S)[ +-]0[,.]?0*(\\^[ +-]\\d+[,.]?\\d*;\\})"

Allerdings muss man in Lisp jeden Backslash doppelt schreiben, daher sieht es noch schlimmer aus, als es so schon ist;-)

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bst
Mitglied



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

erstellt am: 19. Sep. 2004 18:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Abend Axel,

die Idee zu dem RegEx-Teil hat Startrek wohl von mir.

Ich benutze dieses in Excel. Und dort muß man im VBA nun wirklich nichts anderes tun, als einen Verweis zu setzen. Via Menu Extras-Verweise halt.

Eine weitere Deklaration oder sowas ähnliches ist nicht notwendig.

> Ich habe mir vor einiger Zeit mal die Mühe gemacht, die PCRE ...

Nun, mich würde das sehr wohl interessierern. Aber nicht für LISP sondern für Office VBA. Ich habe schon ein paar Mal in verschiedenen Foren danach gefragt, aber bisher konnte mir keiner weiterhelfen.

> Ich weiss aber nicht, inwieweit diese VBScript-RegEx kompatibel zu Perl sind.

Leider nicht besonders. Aber auch nicht so unterschiedlich, daß man sie nicht in den Griff bekommen könnte.

> Mein bevorzugter Texteditor "kann" RegEx - aber inkompatibel zu perl  > und stark vereinfacht

Meiner, VIM :-), auch. Leider auch nicht kompatibel zu Perl, aber IMHOIn my humble opinion = Meiner bescheidenen Meinung nach  in der gleichen Liga, was die Möglichkeiten betrifft. Zumindest im Vergleich mit Perl 5.

> Deine Beispiele sind ja nur der ganz simple Anfang -

Dieses war nun auch beabsichtigt ;-)

>> S="\((.*)\)"
>> E="$2"

Das ist ganz einfach ein Fehler von mir. Es muß natürlich $1 lauten.

Den Kommentar auf der Jenda-Seite hab' ich auch gelesen.
Und mich ansonsten darüber gefreut, endlich eine vernünftige PERl-LIB unter VBA ans laufen zu bekommen. Nun ja bis ich es probiert hatte.

Irgendwie habe ich es nicht hinbekommen und außerdem ist mir früher oder später Excel eigentlich immer total abgestürzt. Dananch habe ich's halt bei dem M$-Teil belassen :-(

Viele Grüße, Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 19. Sep. 2004 20:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Hi Bernd,

nun weiss ich auch, wer Bernd ist;-)

> Das ist ganz einfach ein Fehler von mir. Es muß natürlich $1 lauten
Beruhigend;-)

> Nun, mich würde das sehr wohl interessierern. Aber nicht für LISP
> sondern für Office VBA

Windows binaries gibt's hier: http://gnuwin32.sourceforge.net/packages/pcre.htm
Das sollte doch irgendwie gehen.

> nicht kompatibel zu Perl, aber IMHO  in der gleichen Liga, was
> die Möglichkeiten betrifft

Das ist für mich das Problem: Ständig umdenken müssen - ich bin doch nicht mehr so flexibel in meinem Alter;-) Mir geht's darum, RegEx-Ausdrücke, die mal in einem Programm funktioniert haben, ohne Änderungen und Anpassungen woanders benutzen zu können. Da ist doch so ein Quasi-Standard was Feines...

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bst
Mitglied



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

erstellt am: 19. Sep. 2004 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Abend Axel,

Danke für den Link. Werde das mal probieren.

> Das ist für mich das Problem: Ständig umdenken müssen - ich bin doch
> nicht mehr so flexibel in meinem Alter;-) Mir geht's darum,
> RegEx-Ausdrücke, die mal in einem Programm funktioniert haben, ohne
> Änderungen und Anpassungen woanders benutzen zu können. Da ist doch > so ein Quasi-Standard was Feines...

Ich persönlich fände es auch viel besser überall die gleiche Syntax benutzen zu können. Aber leider gibt's ja wohl keinen wirklichen (erweiterten) RegExp-Standard. 

Und auch nicht alle wollen wohl auf PERL-Syntax wechseln.

Zumindestens blieben meine bisherigen Anfragen bei VIM bzw. VIM-DEV leider ziemlich erfolglos :-(

Schönen Abend noch,

Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 18. Jan. 2005 20:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von mapcar:
Damit meinte ich, dass es unter VB(A) doch nicht reicht, nur einen Kommentar einzufügen, um auf etwas zu verweisen:

> 'Verweis auf Microsoft VBScript Regular Expressions 5.5 setzen
Muss dann da nicht so was kommen?
Declare Function publicname Lib "libname" [Alias "alias"] [(ByVal] variable [As type] [,[ByVal] variable [As type...])] As Type



dies hat mir ja nun teilweise schlaflose Nächte bereitet, deswegen:
wenn ich auch ein sehr, sehr spätes Mädchen bin, ich weiss ...
was das automatische Referenzieren einer Lib angeht,
irgendwie geht das so,
wundersamerweise läuft acad sogar noch nach meinem Rumgepfusche im Urcode ;-)

Gruss Nancy
--
... also, für alle die's intressiert

Code:

Option Explicit
Private Declare Function SystemVerzeichnis Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Sub test()
    Dim intIndex As Integer, bolfound As Boolean
    Dim TempBuffer As String * 255, WinSysDir As String, ReturnCode As Long
    ReturnCode = SystemVerzeichnis(TempBuffer, 255)
    WinSysDir = Left$(TempBuffer, ReturnCode)
    With Application.VBE.activevbProject.references
        For intIndex = 1 To .Count
            If Right(.Item(intIndex).FullPath, InStr(1, StrReverse(.Item(intIndex).FullPath), "\") - 1) = "3" Then bolfound = True: Exit For
        Next
        If Not bolfound Then .AddFromFile WinSysDir & "\vbscript.dll\3"
    End With
End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 30. Jan. 2005 19:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich bleib' mal in dem Thread, da das Thema doch etwas spezifisch ist:
im Rahmen dieses Threads http://ww3.cad.de/foren/ubb/Forum54/HTML/009666.shtml, war ich zwar vba-functions-technisch dran,
is aberein Fass ohne Boden.
Hab' heute zum Sonntag mal noch bissel rumgespielt, Basis war Axels Ausdruck: pattern = "(.*?)\{\\f.*?;(.*?)\}(.*)"
aus diesem Thread: http://ww3.cad.de/foren/ubb/Forum54/HTML/004190.shtml#000012
Leider berücksichtigt der keine Höhenangaben bei formatiertem Text, oder aber ich bin zu blöd dazu.
Bekomms schlichtweg nicht hin, die /H*x; Dinger rauszuzaubern ...
Also sprich, als Ziel nur die 'reinen' Texte und /P == Umbrüche rauszufiltern ...
Nochwas - hab nicht alle möglichen Kombinationen von Höhen/Texten[ttf oder shx]/ Unterstreichungen [da wirds gaaanz ganz finster] durch,
deswegen kann gut und gerne im Falle X nicht gehen, trotzdem nur mal so noch als Ansatz:
Code:

Sub clearFormats_with_Regex()
  Dim sset As AcadSelectionSet, ent As AcadEntity, re As New RegExp
  Dim s As String
  Set sset = ActiveDocument.SelectionSets.Add("set01")
  sset.SelectOnScreen
  re.IgnoreCase = 1: re.Global = 1
  For Each ent In sset
      If TypeOf ent Is IAcadMText Then
        re.Pattern = "(.*?)\{\\f.*?;(.*?)\}|\{\\f.*?\\H.*x;(.*?)\}(.*)"
        're.Pattern = "(.*?)\{\\f.*?;(.*?)\}|\{\\f.*?\\H\d+x;(.*?)\}(.*)"
        ent.TextString = re.Replace(ent.TextString, "$1$2$3")
        Debug.Print ent.TextString
      End If
  Next
  sset.Delete
  Set re = Nothing
End Sub

lg Nancy 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Acad 2011-deutsch, Express Tools
3ds Max 2010
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 04. Feb. 2005 13:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für startrek 10 Unities + Antwort hilfreich

Ich hab da auch gerade einen kleinen Artikel gefunden.
http://www.codeproject.com/dotnet/RegexTutorial.asp
Da gibt es auch anscheinend ein kleines Programm das auch interessant sein könnte.
http://www.ultrapico.com/Expresso.htm

------------------
Roland

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Feb. 2005 21:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hey Roland, danke auch für den Link!
und wieder einer mehr im Boot - schön,
vielleicht können wir ja irgendwann mal sowas wie nen Club bilden ;-)
Naja, zugegeben, das mit den 30 min. hat bei mir nich so ganz funktioniert ...,
aber wenigstens weiss ich jetze, warum das mit dem | == 'oder' nicht klappte,
da muss man mit den kompliziertesten Mustern beginnen und nach hinten sukzessive vereinfachen [glaube],
wieauchimmer, bin jetzt damit hier und habe es ziemlich verschlimmbessert [geht nämlich garnich mehr großartig] *g*

Aber ich bleib dran, muss doch irgendwie gehen [dieses Jahr noch;-)]
lg Nancy

Code:

Urstring = "123{\fArial Black|b0|i0|c0|p34;456\P}789;10;11;{\fHelvetica56|b0|i0|c0|p34;\H2x;12;13\P}14;{\Fscriptc.shx;\H2x;15\H0.25x;;16}"
re.Pattern = "(.*?)\{\\f.*?\\H\d{1,2}\.\d{1,2}x;(.*?)\}|\{\\f.*?\\H\d{1,2}x;(.*?)\}|\{\\f.*?;(.*?)\}(.*)"

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz