Seite 1 von 1

Inhalt der Zelle NICHT als RegExp interpretieren

Verfasst: Di, 21.04.2009 16:07
von AlexS77
Hallo.

Für bestimmte Formeln/Tabellen meiner OOo Calc 3.0.1 Datei brauche ich's, das ich „Regular Expressions“ (Reg Exp, „reguläre Ausdrück“) verwenden kann. Aber, für manch andere Formeln nicht.

Ich habe in einer Tabelle folgenden Inhalt:

MB BMW E85 7 896 023_E04.pdf
Angebot Lehre 363.pdf
Angebot Lehre 532+363.pdf
Angebot 490 Cimform neu.pdf
070904 X250 Delivery Term Spec HLC088 EPDM 35Kg PAPE Film front carpet.pdf

Weiter stehe in A9 "Angebot Lehre 532+363.pdf". Und zu guter letzt habe ich diese Formel:

Code: Alles auswählen

=SVERWEIS(A9;A1:A5;1;FALSCH())
Aktiviere ich nun die unterstützung von Regular Expressions, so bekomme ich ein #NV "an den Kopf geknallt" :( Grund: Das "+" wird als RE Zeichen interpretiert und somit gibt's in der Tat keinen Treffer. Escape ich allerdings das + (setze also A9 = "Angebot Lehre 532\+363.pdf"), so klappt's. Dito, wenn ich REs deaktiviere.

Die angehängte Tabelle soll das Problem zeigen.
Problem wegen Reg Exp in SVERWEIS.ods
Verwende Formel =SVERWEIS(A9;A1:A5;1;FALSCH()) und A9 wird als RegExp ausgewertet... :(
(9.2 KiB) 31-mal heruntergeladen
Ich möchte aber RE Support nicht ausschalten.

Kann ich Calc irgendwie dazu bringen, das JETZT in DIESER Formel an DIESER Stelle der Zellinhalt "wörtlich" zu nehmen sei? Gibt's also z.B. irgendwie eine Funktion oder so, die den Inhalt "escaped"? Quasi:

Code: Alles auswählen

=SVERWEIS(ESCAPE(A9);A1:A5;1;FALSCH())
Vielen Dank,
Alexander

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Verfasst: Di, 21.04.2009 20:10
von AlexS77
Sanne hat geschrieben:Du hast es eigentlich schon selbst aufgeschrieben:
=SVERWEIS(WECHSELN(A9;"+";"\+");A1:A5;1;0)

Wenn Du noch mehr solche Zeichen hast, musst Du verschachteln:
=SVERWEIS(WECHSELN(WECHSELN(WECHSELN(A9;")";"\)");"(";"\(");"+";"\+");A1:A5;1;0)

mfG
Danke.

Okay, an WECHSELN() hatte ich nicht gedacht. Sieht auch IMO überhässlich aus ist "etwas" umständlich - aber wenn's tutet *g* Um alle RE Sonderzeichen zu "wechseln", müsste man also machen:

Code: Alles auswählen

=WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(A9;"\";"\\");")";"\)");"(";"\(");"+";"\+");".";"\.");"[";"\[");"]";"\]");"?";"\?");"*";"\*");"^";"\^");"$";"\$");"{";"\{");"}";"\}")
Oder kann man da vlt. auch REs bei WECHSELN() verwenden? Bei perl/sed/... würde ich machen:

Code: Alles auswählen

boeser_text="Ein Test + Text mit (2*1)^8 US $, soll das sein? In C:\Windows ist [W95] & Vista. {Note1}"
echo "$boeser_text" | perl -p -e 's,[.^\$*+?&{}()\[\]\\],\\$&,g'
# bzw.
echo "$boeser_text" | perl -p -e 's,([.^\$*+?&{}()\[\]\\]),\\$1,g'
# → Ein Test \+ Text mit \(2\*1\)\^8 US \$, soll das sein\? In C:\\Windows ist \[W95\] \& Vista\. \{Note1\}
Danke,
Alexander

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Verfasst: Di, 21.04.2009 23:24
von Stephan
Okay, an WECHSELN() hatte ich nicht gedacht. Sieht auch IMO überhässlich aus ist "etwas" umständlich - aber wenn's tutet *g* Um alle RE Sonderzeichen zu "wechseln", müsste man also machen:

[...]
Du könntest das auch in eine benutzerdefinierte Funktion packen, z.B.:

Code: Alles auswählen

Function XRE(x)
ofunction = CreateUnoService("com.sun.star.sheet.FunctionAccess")
alle = Array("\",")","(","+",".","[","]","?","*","^","$","{","}")
Dim Argumente(2) As Variant

For i = 0 To UBOUND(alle())
	Argumente(0) = x
	Argumente(1) = alle(i)
	Argumente(2) = "\" & alle(i)
	
	x = ofunction.CallFunction("SUBSTITUTE",Argumente())
Next i

XRE = x

End Function
und in der Tabelle dann diese benutzen, z.B.:

=SVERWEIS(XRE(A9);A1:A5;1;FALSCH())


Ob das, in Abwägung aller Umstände, für DEine Zwecke besser ist weiß ich aber nicht.



Gruß
Stephan

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Verfasst: Mi, 22.04.2009 09:20
von AlexS77
Sanne hat geschrieben:Was mir grad einfällt:
ich glaube, die Einstellung "regex in Formeln zulassen" wird pro Dokument gespeichert. Probiers doch mal aus, vielleicht brauchst Du das ganze Theater dann gar nicht.
mfG
Okay, danke, guter Hinweis - NUR: Ich brauche in dieser Datei in manchen Tabellen auch RE's.

Mich wundert halt ein wenig, das es da keine einfache Möglichkeit gibt, einen Text zu escapen; wundert mich besonders deshalb, da "RE in Formeln ermöglichen" ja per Default aktiviert ist.

Seltsam.

Tja :)

Danke nochmal,
Alexander

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Verfasst: Mi, 22.04.2009 09:22
von AlexS77
Moin!
Stephan hat geschrieben:Ob das, in Abwägung aller Umstände, für DEine Zwecke besser ist weiß ich aber nicht.
Keine Ahnung ob's besser ist - auf jeden Fall finde ich Deine Hilfe sehr gut, denn jetzt habe ich auch mal gesehen, wie man so eine Funktion einbinden würde. :)

Alleine schon dafür bin ich dankbar *G*

Alexander

PS: Sanne, Dir bin ich aber natürlich auch für Deinen WECHSELN() Hinweis dankbar, nicht falsch verstehen :)