PDA

Vollständige Version anzeigen : Stringmanipulationen


TommyK
07.12.2006, 14:47
Hallo,

zuri hat mir noch einige Codes zugesandt die wir hier gerne vorstellen wollen.

1. Lösche alle Zeichen bis zum ersten Leerzeichen
Code:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Function</span> L&ouml;schen_bis_Blank(InText <span class="TOKEN">As</span> <span class="TOKEN">String</span>) <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> Integer, n <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> OutStr <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> c <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
n = Len(InText)
OutStr = &quot; &quot;
&nbsp;
<span class="TOKEN">For</span> I = 1 <span class="TOKEN">To</span> n
c = Mid(InText, I, 1)
<span class="TOKEN">If</span> c = &quot; &quot; <span class="TOKEN">Then</span>
OutStr = Mid(InText, I + 1, n - I + 1)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span>
&nbsp;
L&ouml;schen_bis_Blank = OutStr
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Aufruf:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> sResult <span class="TOKEN">As</span> <span class="TOKEN">String</span>
sResult = L&ouml;schen_bis_Blank(&quot;Microsoft Office Forum&quot;)</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)
Das Ergebnis wäre:
Office Forum

2. Lösche alle Zeichen ab dem ersten Leerzeichen
Code:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Function</span> L&ouml;schen_ab_Blank(InText <span class="TOKEN">As</span> <span class="TOKEN">String</span>) <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> Integer, n <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> OutStr <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> c <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
n = Len(InText)
OutStr = &quot; &quot;
&nbsp;
<span class="TOKEN">For</span> I = 1 <span class="TOKEN">To</span> n
c = Mid(InText, I, 1)
<span class="TOKEN">If</span> c = &quot; &quot; <span class="TOKEN">Then</span>
OutStr = Mid(InText, 1, I - 1)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span>
&nbsp;
L&ouml;schen_ab_Blank = OutStr
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Aufruf:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> sResult <span class="TOKEN">As</span> <span class="TOKEN">String</span>
sResult = L&ouml;schen_ab_Blank(&quot;Microsoft Office Forum&quot;)</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)
Das Ergebnis wäre:
Microsoft

3. Lösche alle Zeichen ab dem letzten Leerzeichen
Code:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Function</span> L&ouml;schen_Ab_Last_Blank(InText <span class="TOKEN">As</span> <span class="TOKEN">String</span>) <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> Integer, n <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> OutStr <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> c <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
n = Len(InText)
OutStr = InText
&nbsp;
<span class="TOKEN">For</span> I = n <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
c = Mid(InText, I, 1)
<span class="TOKEN">If</span> c = &quot; &quot; <span class="TOKEN">Then</span>
OutStr = Mid(InText, 1, I - 1)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span>
&nbsp;
L&ouml;schen_Ab_Last_Blank = OutStr
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Aufruf:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> sResult <span class="TOKEN">As</span> <span class="TOKEN">String</span>
sResult = L&ouml;schen_Ab_Last_Blank(&quot;Microsoft Office Forum&quot;)</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Das Ergebnis wäre:
Microsoft Office

Sascha Trowitzsch
07.12.2006, 18:53
Meine Vorschläge:
Function Loeschen_bis_Blank(InText As String) As String
Loeschen_bis_Blank = Mid$(InText, InStr(1, InText, " ") + 1)
End Function

Function Loeschen_ab_Blank(InText As String) As String
Dim i As Long
i = InStr(1, InText, " ")
Loeschen_ab_Blank = Left$(InText, IIf(i = 0, Len(InText), i - 1))
End Function

Function Loeschen_Ab_Last_Blank(InText As String) As String
Dim i As Long
i = InStrRev(InText, " ")
Loeschen_Ab_Last_Blank = Left$(InText, IIf(i = 0, Len(InText), i))
End Function

Gruß, Sascha

J_Eilers
08.12.2006, 06:24
@Sascha Und was soll dann Anne mit dem Code? Scherz beiseite. Vielleicht sollte man noch erwähnen, dass InStrRev() erst ab Access 2000 einsetzbar ist und die Ersatzfunktionen gibts in der DBWiki.

Sascha Trowitzsch
08.12.2006, 08:51
Ich hab durchaus an Anne gedacht!
Ich dachte mir aber dabei 1., dass sie keine Texte nach dem letzten Leerzeichen abtrennen will, und 2., dass sie mal gezwungen werden muss, A97 endgültig abzuschießen. ;)
Ansonsten wollte ich, dass keine der Funktionen länger als 3 Zeilen wird. :D

Ciao, Sascha

Anne Berg
08.12.2006, 16:32
Hey, hey, Feind liest mit! :D Nein, keine Angst. Es freut mich sehr, dass ich hier zur allgemeinen Belustigung beitrage. Doch solange es die Ersatzfunktionen gibt, die ich mir notfalls auch noch selbst programmieren könnte :p, bin ich noch nicht von der Notwendigkeit des Umstiegs überzeugt, Sascha. ;)

Nebenbei, ich habe doch alles was man braucht (um mitreden zu können): 97, XP, 2003, sogar 2007 :eek: - da habe ich dann aber doch ganz schnell die Finger von gelassen. Ich fürchte, dafür bräucht ich erstmal eine neue Schulung. :cool:

Arne Dieckmann
11.11.2007, 11:08
Hier noch einmal ein anderes "Left", falls man evtl. Abschneiden kenntlich machen will und nicht im Wort abgeschnitten werden soll:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Function</span> fctLeft(s <span class="TOKEN">As</span> String, _
m <span class="TOKEN">As</span> Long, _
<span class="TOKEN">Optional</span> a <span class="TOKEN">As</span> <span class="TOKEN">String</span> = &quot;...&quot;, _
<span class="TOKEN">Optional</span> t <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span> = <span class="TOKEN">True</span>) _
<span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">Dim</span> i <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> strRes <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">If</span> t = <span class="TOKEN">True</span> <span class="TOKEN">Then</span> s = Trim(s)
&nbsp;
i = Len(s)
strRes = s
&nbsp;
<span class="TOKEN">If</span> i &gt; m <span class="TOKEN">And</span> m &gt; 0 <span class="TOKEN">Then</span>
strRes = Left(strRes, InStrRev(s, &quot; &quot;, m + 1))
<span class="TOKEN">If</span> Len(strRes) &lt; i <span class="TOKEN">Then</span>
strRes = strRes &amp; a
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
fctLeft = strRes
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Beispiel:
<span style="font-family:Courier New;color:#000080;">?fctLeft("Ein Wort, gefolgt von einem anderen Wort ",20)
Ein Wort, gefolgt ...</span>

Im Gegensatz dazu die einfache Left-Funktion:
<span style="font-family:Courier New;color:#000080;">?left("Ein Wort, gefolgt von einem anderen Wort",20)
Ein Wort, gefolgt vo</span>


<div style="padding: 5px 7px; border: 1px solid #BBCCE9; background-color: #F5F8FD; border-left: 5px solid #8CA9DA; font-size: 95%;"><img class="inlineimg" src="/daten/icons/info.gif" /> Hinweis: Weil <span style="font-family:Courier New;color:#000080;">InStrRev</span> eingesetzt wird, braucht man bei der Verwendung mit älteren Access-Versionen hier ebenfalls die Ersatzfunktionen, die man unter Access 2000 String-Funktionen in Access 97 nutzen (Klick mich) (http://www.dbwiki.de/wiki.php?title=VBA_Tipp:_Access_2000_String-Funktionen_in_Access_97_nutzen) findet.</div>