[mit Python gelöst] String nach "regulärem Ausdruck" durchsuchen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

[mit Python gelöst] String nach "regulärem Ausdruck" durchsuchen

Beitrag von StePfl » Fr, 28.07.2017 15:24

im "normalen" Calc kann ich mit "=SUCHEN(C4;" [0-9]{4} ") einen String nach einem "regulären Ausdruck" wie hier z.B. " [0-9]{4} " (eine vierstellige Zahl, die davor und danach ein Leerzeichen hat) durchsuchen. Das funktioniert auch ganz gut.

Ich bräuchte eine vergleichbare Funktion auch im Basic als Function/Sub.
So wäre es toll, wenn ich per Makro einen (langen) String daraufhin überprüfen könnte, ob er einen Datumsstring wie z.B. "[0-9]{2}\.[0-9]{2}\.[0-9]{4}" enthält - und wenn ja, an welcher Stelle dieser steht.

Gibt es so etwas?

Danke und ein schönes Wochenende,

Gruß StePfl
Zuletzt geändert von StePfl am Fr, 28.07.2017 19:33, insgesamt 2-mal geändert.

Stephan
********
Beiträge: 10178
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: String nach "regulärem Ausdruck" durchsuchen

Beitrag von Stephan » Fr, 28.07.2017 18:21

So wäre es toll, wenn ich per Makro einen (langen) String daraufhin überprüfen könnte, ob er einen Datumsstring wie z.B. "[0-9]{2}\.[0-9]{2}\.[0-9]{4}" enthält - und wenn ja, an welcher Stelle dieser steht.
Dieser Suchbegriff sucht, meines Erachtens, keinem Datumsstring, sondern lediglich einen String der ähnlich aufgebaut ist (denn z.B. 99.45.1234 ist ein zulässiges Ergebnis, aber kein Datum), gleichzeitig ist die Suche nach diesem Suchbegriff doch durch einfache Stringzerlegung umzusetzen, beispielsweise:

Code: Alles auswählen

Sub String_pruefen()
	'der String:
	txt = "BlaBla12.97.1998BlaBubb12.12.1903abcxyz"
	laenge = LEN(txt)
	
	For i = 10 to laenge
		k = 0
		tmp1 = left(txt, i)
		tmp2 = Right(tmp1, 10)
		tmp3 = Split(tmp2,".")
		tmp4 = JOIN(tmp3,"")
		If UBOUND(tmp3()) = 2 Then
			If LEN(tmp3(0)) = 2 AND LEN(tmp3(1)) = 2 AND LEN(tmp3(2)) = 4 Then
				For j = 1 to LEN(tmp4)
					ts = Left(tmp4,j)
					Select Case ASC(Right(ts,1))
						Case 48 to 59
							k = k + 1
					End Select
				Next j
				If k = 8 Then Msgbox "Datum beginnt an Position " & i-9
			End If
		End If
	Next i
End Sub
(wahrscheinlich geht das noch besser, ich habe vorstehenden Code nur aus dem Kopf hingeschrieben)



Gruß
Stephan

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

Re: String nach "regulärem Ausdruck" durchsuchen

Beitrag von StePfl » Fr, 28.07.2017 18:53

WOW - DANKE!
Für die Suche nach einem Datum ist das eine super Lösung!
Allerdings lässt das "SUCHEN()" wesentlich komplexere Strukturen zu ... Deshalb hatte ich nach einer "Äquivalenten" Funktion im Basic-Dialekt gefragt.

Ich habe inzwischen eine Lösung über die Ankoppelung von Python (ein wenig) weiter gekommen -
ich beschreibe es hier: viewtopic.php?f=18&t=68390&sid=432ee651 ... c8#p270647

Gruß + Danke + schönes Wochenende
StePfl

Toxitom
********
Beiträge: 3445
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: [mit Python gelöst] String nach "regulärem Ausdruck" durchsuchen

Beitrag von Toxitom » Sa, 29.07.2017 16:21

Hey StePFl,

dann auch kurz hier: Falls Du keine eigene Funktion in Basic "basteln" willst - Du kannst jede in Calc verfügbare, eingebaute Funktion auch direkt in Basic-Code aufrufen:

Code: Alles auswählen

oFunctionAccess = createUnoService("com.sun.star.sheet.FunctionAccess")
aArg = array("text", "Suchtext",iStart)
erg = oFunctionAccess.callFunction("SEARCH", aArg())
Brauchst dafür allerdings die internen, englichen Funktionsbezeichnungen. Ob "SEARCH" hier korrekt ist, hab ich nicht nachgesehen. Mit XRAY kannste die aber rausbekommen.
Zusätzlich muss ein passender Array mit Parametern übergeben werden!

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 5- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

Re: [mit Python gelöst] String nach "regulärem Ausdruck" durchsuchen

Beitrag von StePfl » So, 30.07.2017 20:04

Hey Tom,

SUPER - Vielen Dank!

viele Grüße,
Stepfl

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste