Reguläre Ausdrücke selektiv umgehen?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Amdur Eledhwen
*
Beiträge: 15
Registriert: Mo, 09.09.2013 00:35

Reguläre Ausdrücke selektiv umgehen?

Beitrag von Amdur Eledhwen »

Hi an alle Formel-Friemler!
Ich habe hier im Forum bereits hervorragende Hilfe erhalten und möchte sie an dieser Stelle gerne wieder in Anspruch nehmen.

es geht um folgende Datei:
ZÄHLENWENN (Fehler).ods
(9.19 KiB) 174-mal heruntergeladen
mit diesem Fehler: augenscheinlich vorhandener Wert in einer Suchmatrix wird nicht erkannt/gefunden
Bildschirmfoto 2013-09-25 um 16.10.34.png
Bildschirmfoto 2013-09-25 um 16.10.34.png (39.76 KiB) 3910 mal betrachtet
der wegen des zweiten Häkchens in den Calc'schen Berechnugnseinstellungen zustande kommt:
Bildschirmfoto 2013-09-25 um 16.15.06.png
Bildschirmfoto 2013-09-25 um 16.15.06.png (27.75 KiB) 3910 mal betrachtet
wird das Häkchen entfernt, und Reguläre Ausdrücke in Formeln nicht ermöglicht, dann funktioniert die ZÄHLENWENN-Funktion so, wie sie soll (findet den per Gültigkeit ausgewählten Wert in B2 genau einmal in der Suchmatrix).
Ich benötige jedoch Reguläre Ausdrücke anderswo in der Arbeitsmappe und das Häkchen muss entsprechend aktiv sein. Dann scheint ZÄHLENWENN() jedoch nur jene Zellen zu finden, die keine Klammern enthalten, nur diese werden dann zurückgegeben (grün unterlegt).

Wenn ihr das Dokument öffnet und damit herum probiert, sollte auch Ziel sein, es in der "extern" Tabelle zu ermöglichen, also tabellenübergreifend (mir deucht, es gibt auch dort Fehlerquellen wegen regulären Ausdrücken). Wie kann ich nun diese Formeln:

Code: Alles auswählen

ZÄHLENWENN(D2:D20;B2)

Code: Alles auswählen

WENN(B3>0;SVERWEIS(B2;D2:E20;2;0);"nicht gefunden")
so abändern, dass ohne reguläre Ausdrücke gesucht wird, also diese umgangen werden? Oder etwas lakonischer: dass die richtige Anzahl wiedergegeben wird? Hierzu wäre auch spannend, was denn nun eigentlich als Regulärer Ausdruck gewertet wird in diesen Formeln… sind es die Klammern? in der OO-Dokumentation (http://wiki.openoffice.org/wiki/Documen ... ns_in_Calc) wird erklärt,
Activating the "Enable regular expressions in formulas" setting means all the above functions will require any regular expression special characters (such as parentheses) used in strings within formulas, to be "escaped" using a preceding backslash, despite not being part of a regular expression. These backslashes will need removing if the setting is later deactivated.
und okay, daraus entnehme ich, dass Reguläre Ausdrücke (regular expressions) durch ein unmittelbar vorangestelltes "\" umgangen werden können… leider ist nirgends ein Beispiel dafür zu finden und klar ist nicht, wo der Backslash hin soll, damit es funktioniert — denn nachdem ich alles ausprobiert habe, kamen immer nur Fehlermeldungen.

Ich wäre für Hilfe abermals sehr, sehr dankbar!

Gruß
Æ
Bockenheimer
***
Beiträge: 61
Registriert: Mi, 11.07.2012 22:08

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Bockenheimer »

Hallo,
Amdur Eledhwen hat geschrieben:ein Beispiel dafür zu finden und klar ist nicht, wo der Backslash hin soll, damit es funktioniert
zur Syntax bei RegEx: der Backslash muss vor jedes Zeichen, das in regulären Ausdrücken zur Steuerung dient, um es als Nicht-Steuerzeichen zu markieren. Dazu zählen u. a. auch Klammern, runde, eckige oder geschweifte.

Für deine eigentliche Fragestellung hilft dir das aber leider nicht. Es gibt aber die Funktion IDENTISCH(). Sie liefert WAHR oder FALSCH auch bei deinen Klammer-Texten. Ich vermute, dass es damit funktioniert.

Beispiel: IDENTISCH(D2:D20;"to hold (something)")

Gruß
Bockenheimer
Amdur Eledhwen
*
Beiträge: 15
Registriert: Mo, 09.09.2013 00:35

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Amdur Eledhwen »

Hallo & Danke schon einmal an Bockenheimer & WiM!

na dann…
Bockenheimer hat geschrieben:der Backslash muss vor jedes Zeichen, das in regulären Ausdrücken zur Steuerung dient, um es als Nicht-Steuerzeichen zu markieren. Dazu zählen u. a. auch Klammern, runde, eckige oder geschweifte. Es gibt aber die Funktion IDENTISCH(). Sie liefert WAHR oder FALSCH auch bei deinen Klammer-Texten. Ich vermute, dass es damit funktioniert.

Beispiel: IDENTISCH(D2:D20;"to hold (something)")
Ich habe deinen Vorschlag (bislang leider erfolglos) ausprobiert, in folgenden Varianten:

Code: Alles auswählen

IDENTISCH(D2:D20;B2)

Code: Alles auswählen

IDENTISCH(D2:D20;WECHSELN(WECHSELN(B2;"(";"\(");")";"\)"))

Code: Alles auswählen

IDENTISCH(D2:D20;"to hold (phone line)")

Code: Alles auswählen

IDENTISCH(D2:D20;INDIREKT("B2"))
Ergebnis: FALSCH

Ich Danke dir trotzdem für die Idee!

Was WiM betrifft…
WiM hat geschrieben:folgende Formeln ergaben bei mir die gewünschten Ergebnisse (mit Haken bei 'Reguläre Ausdrücke'):
B3: =SUMMENPRODUKT(D2:D20=B2)
B4: =WENN(B3>0;SVERWEIS(WECHSELN(WECHSELN($B2;"(";"\(");")";"\)");D2:E20;2;0);"nicht gefunden")
…oh oh oh… rigmarole!
ja, das funktioniert auf jeden Fall… vielen Dank schon mal dafür! das Summenprodukt scheint die regulären Ausdrücke zu umgehen! JEDOCH verhält es sich so, dass die Beispieldatei im Vergleich zu jener, für die das Ganze dienlich sein soll, extrem simpel und übersichtlich ist. Ich spreche von einer Arbeitsmappe mit >10 Tabellen und tausenden von Bezügen, die unter Verwendung regulärer Ausdrücke teilweise den Geist aufgeben. Für all diese Fälle, wo quasi ein Textzeichen nun mit einem regulären Ausdruck verwechselt wird, die Formeln entsprechend zu ändern wäre theoretisch möglich nur grenzt das an blanken Wahnsinn… vor allem, wenn jeder betroffene Bezug (Fehlerquellen weiß Gott nicht einfach zu eruieren…) mit der WECHSELN()-Funktion versehen werden müsste, und, ich nicht einmal genau weiß, welche verschieden Zeichen alle dieses Chaos verursachen können bzw. in welchen Zellen welches wie auftritt. Mit viel Pragmatismus, Zuversicht und Ausdauer wäre es offensichtlich mit deiner Methode zu realisieren — aber wahrscheinlich bevorzuge ich eher den Strick!

Ich bin wirklich etwas ratlos an dieser Stelle, denn es drängen sich keine weiteren Lösungen oder Strategien auf, die schneller zum Ziel führen. Ich habe bereits versucht, die Werte in Klammern, i.e. "(phone)", allesamt durch "/phone" zu ersetzen, also ein Zeichen zu verwenden, welches kein regulärer Ausdruck ist — die Ästhetik leidet natürlich, und ich müsste mir am Ende trotzdem jede Funktions-Zelle einzeln vornehmen, testen und korrigieren… boa!

also ich bin für weitere Ansätze weiterhin offen, mir selbst gehen jedoch die Ideen aus! Schön wäre zum Beispiel, wenn ich die Aktivierung der regulären Ausdrücke in Formeln auf bestimmte Tabellenblätter beschränken könnte; dann bräuchte ich nicht alle Funktionen in meinem Blatt ändern, nur um eine Stichwortsuche für die 2000+ Vokabeln zu integrieren.

Any more ideas?
Vielen Dank trotzdem bis hierher!

Æ
Bockenheimer
***
Beiträge: 61
Registriert: Mi, 11.07.2012 22:08

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Bockenheimer »

Hallo Amdur Eledhwen,

hm, ich habe dein Problem nachgebildet, weil ich nicht gerne Dateien downlade. Bei mir schaut das so aus - RegEx-Häkchen ist natürlich gesetzt:
IDENTISCH.jpg
IDENTISCH.jpg (17.09 KiB) 3833 mal betrachtet
fett ist die Tabellenüberschrift. In den Zellen b2 bis b5 steht immer =IDENTISCH($A$2:$A$10;$G$2). Das ist nicht ganz dasselbe wie bei dir hier:
Amdur Eledhwen hat geschrieben:IDENTISCH(D2:D20;INDIREKT("B2"))
Ich habe die Liste (Bezug) ebenfalls mit INDIREKT versehen, um sie einfacher kopieren zu können. Sofern du beim Kopieren der Zeilen darauf geachtet hast, dass dein Bereich in allen Zeilen D2:D20 enthält, muss das auch klappen.

Sorry übrigens, dass ich mit A2:A10 gearbeitet habe. Aber ich denke, damit hast du kein Problem.

Das mit dem Backslash habe ich nur geschrieben, weil du nach der Syntax gefragt hattest. Natürlich kann es nicht der Weg sein, alle RegEx-Steuerzeichen in deinen Vokabel-Begriffen zu maskieren.

LG
Bockenheimer
P.S. vielleicht lade ich deine Tabelle doch mal runter... :-)
Zuletzt geändert von Bockenheimer am Do, 26.09.2013 23:14, insgesamt 1-mal geändert.
Bockenheimer
***
Beiträge: 61
Registriert: Mi, 11.07.2012 22:08

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Bockenheimer »

Nochmals Hallo,

hier meine Modifikation mit der erwarteten Zahl. Die Hilfsspalte C:C kannst du später ausblenden. Um das Feld b4 habe ich mich dann auch noch gekümmert. So sieht's jetzt aus:
ZÄHLENWENN(ohneFehler).jpg
ZÄHLENWENN(ohneFehler).jpg (28.12 KiB) 3823 mal betrachtet
Gruß
Bockenheimer
Dateianhänge
ZÄHLENWENN (ohneFehler).ods
(11.31 KiB) 144-mal heruntergeladen
Bockenheimer
***
Beiträge: 61
Registriert: Mi, 11.07.2012 22:08

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Bockenheimer »

Hallo

das Thema ist ja wahrscheinlich für das auslösende Problem erledigt, aber zufällig fand ich in der RegEx-Hilfe von Eclipse diese Maskierung für Stringausdrücke mit Steuerzeichen:

All characters between \Q and the next \E are taken literally and are not interpreted.
Example:
The expression "\Qnew int[] {42}\E;" matches text "new int[] {42}".


Da dachte ich an das Problem hier und füge es der vollständigkeithalber bei. Für ZÄHLENWENN() und SVERWEIS() habe ich es erfolgreich getestet. Statt
WiM hat geschrieben: B3: =SUMMENPRODUKT(D2:D20=B2)
B4: =WENN(B3>0;SVERWEIS(WECHSELN(WECHSELN($B2;"(";"\(");")";"\)");D2:E20;2;0);"nicht gefunden")
schaut es dann so aus - diese Variante scheint mir zumutbar:

B3: =ZÄHLENWENN(D2:D20;VERKETTEN("\Q";B2;"\E"))
B4: =WENN(B3>0;SVERWEIS(VERKETTEN("\Q";B2;"\E");D2:E20;2;0);"nicht gefunden")

...und die Hilfsspalte in meiner Lösung vom 26.9. kann dann natürlich weg.

LG
Bockenheimer
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von lorbass »

Bockenheimer hat geschrieben:All characters between \Q and the next \E are taken literally and are not interpreted.
Meine Versuche mit dieser Textberechs-Maskierung in Calc und Writer allesamt negativ verlaufen. Ich arbeite mit LibreOffice 3.5.4.2 unter GNU/Linux Kubuntu 11.04.
Bockenheimer hat geschrieben:Für ZÄHLENWENN() und SVERWEIS() habe ich es erfolgreich getestet.
In welcher Systemumgebung hast du erfolgreich getestet?

Gruß
lorbass
Bockenheimer
***
Beiträge: 61
Registriert: Mi, 11.07.2012 22:08

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von Bockenheimer »

Hallo lorbass,

meine Umgebung: WIN XP SP3 (32), AOO 4.0.1 Rev1516414

verunsichert, habe ich die Parameter noch einmal geprüft: Häkchen bei RegEx in den Options gesetzt und die selektive Maskierung beim Suchstring verwendet. Im Bereich D2:D20 muss nichts maskiert sein. Das von Amdur Eledhwen gewünschte Ergebnis wird erhalten.

Gruß
Bockenheimer
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von clag »

Hallo Amdur Eledhwen und Mitleser,

bist du noch ineressiert an einer einfachen flexiblen Lösung?
Ich glaube eine zu haben.

Habe mich da auch mal an dem Problem versucht und erziele ein fehlerfreies Ergebnis bei der Suche
Aber schau und probiert erst einmal ob das deiner Vorstellung genügt.
Und ist auch ganz easy anzupassen falls nötig :)
ZÄHLENWENN (fehlerbereinigt).ods
(9.39 KiB) 181-mal heruntergeladen
viel Spaß
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Reguläre Ausdrücke selektiv umgehen?

Beitrag von lorbass »

Bockenheimer hat geschrieben:verunsichert
Kein Grund, verunsichert zu sein. Offenbar bewegen sich die Entwicklungslinien auseinander.

Auf der Wiki-Seite Regexp (Stand 10.09.2006, 16:29) ist zu lesen, dass langfristig geplant sei, die Regexp-Engine auszutauschen. In den Release Notes der Version 3.4 (die erste unter Apache-Ägide) habe ich mittlerweile die Vollzugsmeldung gefunden: „New regular expressions (regexp) engine“ mit Verweis auf die in 2006 annoncierte ICU regex syntax.

Was lernen wir daraus? Die Arbeit hier im Forum wird durch auseinander driftende Software nicht einfacher werden! ;)

Übrigens: regexp und regex sind keine Tippfehler von mir; beides ist gebräuchlich und meint dasselbe.

Gruß
lorbass
Antworten