Array- & Stringfunktionen (Problem bei Umstieg von VBA)

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

Moderator: Moderatoren

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Hallo Marci,
marci hat geschrieben:und bei Eingabe von NICHT aufeinanderfolgenden "Such-Werten"
Das habe ich NICHT verstanden.

Wenn es nur um das Ausfiltern der im Array enthaltenen Zeichen geht dann würde ich das wie folgt lösen:

Code: Alles auswählen

Sub Main
	Dim arrVocals As Variant
	GlobalScope.BasicLibraries.LoadLibrary("Tools"
	str_telefon = "mcflf,  emmv  1234 w.l,ww,w,dkdsks 45657 |"
	arrVocals = Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","_","-","@","€",",",";",".",":","#","'","+","*","~","´","`","?","\","ß","}","=","]",")","(","[","/","{","&","%","$","§","!","^","°","<",">","|")
             
	for i = 0 To ubound(arrVocals)
	str_telefon = replaceString(str_telefon, "", arrVocals(i))
	next i
		
	msgbox str_telefon
End Sub
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von Karolus »

Hallo
Geht es nur um die Rückgabe der Ziffern 0 bis 9 aus einem Text?

Code: Alles auswählen

function numeric( stext as string) as string
numeric = ""
for i = 1 to len(stext)
	char = mid( stext, i, 1)
	if isNumeric( char) and char <> " " then
		numeric = numeric & char
	end if
next
end function
Edit: Leerzeichenfehler beseitigt

Gruß Karo
Zuletzt geändert von Karolus am Mo, 05.04.2010 23:39, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Hallo Karolus,

die Function ist mal wieder echt klasse. Kompliment.

Mir eröffnet sich jetzt nur die Frage, warum bleiben die Leerzeichen erhalten? Sind die auch numerisch?

Schöne Grüsse.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von Karolus »

Hallo
Sorry, auf Leerzeichen hatte ich nicht getestet, wer kommt den auf den Gedanken das Leerzeichen 'isNumeric' sind :?

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von Stephan »

warum bleiben die Leerzeichen erhalten? Sind die auch numerisch?
Die Leerzeichen werden bei numerischen Werten im Allgemeinen ignoriert. Ausdrücke wie:

Code: Alles auswählen

Val(" 123. 123")
Val("123. 123")
Val(" 123.123")
sind also quasi äquivalent.

Für ISNUMERIC() sollte in der Hilfe wohl statt:

"Prüft, ob es sich bei einem Ausdruck um eine Zahl handelt. Ist der Ausdruck eine Zahl, so gibt die Funktion "True" zurück, ansonsten "False"."

besser stehen:

"Prüft, ob der Ausdruck als Zahl interpretiert werden kann. Ist das der Fall, so gibt die Funktion "True" zurück, ansonsten "False"."



Gruß
Stephan
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Hallo Stephan,
Stephan hat geschrieben:"Prüft, ob der Ausdruck als Zahl interpretiert werden kann. Ist das der Fall, so gibt die Funktion "True" zurück, ansonsten "False"."
Wenn sich das Leerzeichen in einer Zahlenkette befindet mag die Logik ja zutreffen.

Im obigen Fall wurde aber jedes einzelne Zeichen geprüft und dabei das Leerzeichen als isnumeric erkannt.

Wie auch in diesem Beispiel wird hier "True" zurückgegeben:

Code: Alles auswählen

Sub ExampleIsNumeric
Dim vVar as variant
vVar = " "
print IsNumeric(vVar)
end sub
Selbst wenn man

Code: Alles auswählen

Dim vVar as integer
deklariert wird "True" zurückgegeben.

Also mein Fragezeichen bleibt.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von Stephan »

Hallo Jürgen,
Wenn sich das Leerzeichen in einer Zahlenkette befindet mag die Logik ja zutreffen.
Solange "Logik" nur umgangssprachlich gemeint ist ja, denn logisch im Eigentlichen ist das Verhalten natürlich nicht.
Im obigen Fall wurde aber jedes einzelne Zeichen geprüft
wieder wird geprüft ob das Ganze als Zahl interpretiert werden kann(*) und das kann es meines Erachtens (notfalls). "Notfalls" deswegen weil, nach meiner Ansicht, z.B. die Frage: "Wieviel Wassser befindet sich im Glas?", bei einem leeren Glas, theoretisch 2 mögliche Antworten kennt:

1. Keines.
2. Es befinden sich 0 ml Wasser im Glas.

Die erste Antwort ist die praktisch Übliche und die Zweite die nicht unbedingt Falsche.


(*)
VBA verhält sich hier anders, nämlich so wie Du es augenscheinlich auch für StarBasic erwartest.
Selbst wenn man
Code: Alles auswählen
Dim vVar as integerdeklariert wird "True" zurückgegeben.
Da ist ja nun eine Variable numerisch, deklariert. Das "selbst" verstehe ich hier also nicht so ganz, denn selbst wenn die Verhältnisse insgesamt etwas komisch sind, dann doch hier noch am Wenigsten, denn das "" und " " bei Prüfung ein TRUE geben mag verwunderlich sein, nur das eine numerisch deklarierte Variable ein TRUE gibt scheint mir dann doch weniger verwunderlich.
Also mein Fragezeichen bleibt.
Ich werde das dann wohl nicht beseitigen können.

Ich weiß auch nicht was ich sonst noch sagen soll, denn ich halte das Verhalten von ISNUMERIC zwar für unlogisch, bin aber quasi an anderen Stellen ein ähnliches Verhalten gewohnt und dafür hatte ich ein Beispiel gegeben.

Ich hielte es also für völlig berechtigt das Ganze dem OOo-Projekt als Fehler zu melden (vielleicht ist es das schon), nur ich persönlich werde das im Konkreten nicht tun.



Gruß
Stephan
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Hi Marci,

meinst Du so was:

Code: Alles auswählen

Sub Main
myString = " Hier: wird : Ihnen: geholfen: "
splitString = Split(myString,":")
for i = lbound(splitString)  to ubound(splitString)-1
msgbox Trim(splitString(i))
next i
End Sub
?

Ansonsten stelle mal einen Beispielstring und was als Ergebnis rauskommen soll zur Verfügung.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Hi,
marci hat geschrieben:Noch mal ne Frage... ich mag ja auch was lernen: WAS bedeutet die Funktion lbound, etc.? Was macht´n die genau?
Drücke mal die F1-Taste und suche unter der Rubrik "Basic" mal nach LBound- und UBound-Funktion.

Zu Deinem eigentlichen Anliegen hier mal ein anderer Ansatz:

Füge das Folgende mal in die Zwischenablage ein:

Verantwortlicher Redakteur: Ulrich Kutsch
Telefon: 0241/5101-357
Fax: 0241/5101-440
u.kutsch@an-online.de

Dann lasse mal folgendes Makro (ist aus meiner Grabbelkiste) laufen:

Code: Alles auswählen

Sub ConvertClipToText
Dim oClip, oClipContents, oTypes
Dim oConverter, convertedString$
Dim i%, iPlainLoc%
Dim iZeichen1 as integer
   iPlainLoc = -1
   oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
   oConverter = createUnoService("com.sun.star.script.Converter")
   oClipContents = oClip.getContents()
   oTypes = oClipContents.getTransferDataFlavors()
   Dim msg$, iLoc%, outS
   msg = ""
   iLoc = -1
   For i=LBound(oTypes) To UBound(oTypes)
   If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
   iPlainLoc = i
   Exit For
   End If
   Next
     
   If (iPlainLoc >= 0) Then
       TextClipboard = oConverter.convertToSimpleType(oClipContents.getTransferData(oTypes(iPlainLoc)), com.sun.star.uno.TypeClass.STRING)
      FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")      

TString = Split(TextClipboard,Chr(13)
for i = 0 to ubound(TString)
msgbox TString (i)
next i

   End If
End Sub
Die aufgesplitteten Zeilen würde ich dann genau so in die Zellen reinschreiben und dann über "Suchen und Ersetzen" (kann man auch über ein Makro erledigen lassen) den überflüssigen Text wie "Verantwortlicher Redakteur" aus den Zellen löschen.

Oder aber die überflüssigen Wörter auch wie oben gemacht schon vorher rausfiltern:

Code: Alles auswählen

   replaceString = Array("Redakteur","Email","EMail","Telefon",":".............)
             
   for i = 0 To ubound(copyStrings)
   cString= replaceString(cString, "", replaceString (i))
   ......
Ich denke das ist die einfachste Variante.

Bei der eMail kannst Du mittels "Instr" (Instring) das Vorhandensein des @'s prüfen.

Es gibt viele Wege die nach Rom führen.


Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von turtle47 »

Das ist doch in den langen Code schon vorhanden:

Code: Alles auswählen

TString = Split(TextClipboard,Chr(13)
for i = 0 to ubound(TString)
msgbox TString (i)
next i
Chr(13) steht für den Zeilenumbruch mit der Enter-Taste.

Das "Split" schreibt den gesamten Inhalt in ein Array und dieses wird dann nacheinander wieder ausgegeben.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Beitrag von DPunch »

Aloha

Wenn Du den Text sowieso in eine Textbox kopierst, brauchst Du eigentlich auch nicht den komplizierten Weg über das Clipboard nehmen.
Du kannst dann erstmal nach Zeilen und bei Bedarf nach Doppelpunkt splitten.

Code: Alles auswählen

aSplittedByLines = Split(sMeinString,Chr(10))
For i = LBound(aSplittedByLines) To UBound(aSplittedByLines)
	If Instr(aSplittedByLines(i),":") > 0 Then
		aSplittedByDoubleDots = Split(aSplittedByLines(i),":")
		MsgBox aSplittedByDoubleDots(1)
	Else
		MsgBox aSplittedByLines(i)
	End If
Next i
sMeinString ist der aus der TextBox ausgelesene String.
Antworten