Inhalt der Zelle NICHT als RegExp interpretieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

AlexS77
Beiträge: 4
Registriert: Di, 21.04.2009 15:54

Inhalt der Zelle NICHT als RegExp interpretieren

Beitrag 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
AlexS77
Beiträge: 4
Registriert: Di, 21.04.2009 15:54

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Beitrag 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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Beitrag 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
Dateianhänge
benutzerdefinierte_Funktion.ods
(10.74 KiB) 34-mal heruntergeladen
AlexS77
Beiträge: 4
Registriert: Di, 21.04.2009 15:54

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Beitrag 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
AlexS77
Beiträge: 4
Registriert: Di, 21.04.2009 15:54

Re: Inhalt der Zelle NICHT als RegExp interpretieren

Beitrag 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 :)
Antworten