Array- & Stringfunktionen (Problem bei Umstieg von VBA)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Array- & Stringfunktionen (Problem bei Umstieg von VBA)

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

von DPunch » Di, 06.04.2010 22:34

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.

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

von turtle47 » Di, 06.04.2010 22:20

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.

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

von turtle47 » Di, 06.04.2010 21:42

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

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

von turtle47 » Di, 06.04.2010 20:37

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

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

von Stephan » Di, 06.04.2010 09:52

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

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

von turtle47 » Di, 06.04.2010 08:10

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

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

von Stephan » Di, 06.04.2010 07:12

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

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

von Karolus » Mo, 05.04.2010 23:37

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

Gruß Karo

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

von turtle47 » Mo, 05.04.2010 21:37

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

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

von Karolus » Mo, 05.04.2010 21:11

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

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

von turtle47 » Mo, 05.04.2010 20:46

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

Nach oben