PDA

Vollständige Version anzeigen : suche Befehl um einen string zu zerlegen


Zapfen
05.05.2001, 10:37
Ich suche einen Befehl um aus diesem string z.B. den namen zu filter:

L 04/25/2001 - 20:02:02: "[HuB] Player<419><202614><>" entered the game

aber der Name "[HuB] Player" ist mir nicht bekannt und der name kann auch länger oder kürzer sein!!!

>>>Kommt aus einer Logfile von eimem CS-Server von dem ich Stats erstellen möchte....

Stefan Kulpa
05.05.2001, 11:47
Hallo,

meinst du so etwas?

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Sub</FONT> Beispiel()

Debug.<FONT COLOR=#000080>Print</FONT> _
GetNameInBrackets("L 04/25/2001 - 20:02:02: '[HuB] Player<419><202614><>'")

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Function</FONT> GetNameInBrackets(<FONT COLOR=#000080>ByVal</FONT> sSource <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>

<FONT COLOR=#000080>Dim</FONT> lLeftPos <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>Dim</FONT> lRightPos <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

lLeftPos = InStr(sSource, "[")
lRightPos = InStr(sSource, "]")
<FONT COLOR=#000080>If</FONT> lLeftPos > 0 <FONT COLOR=#000080>And</FONT> _
lRightPos > 0 <FONT COLOR=#000080>And</FONT> _
lLeftPos < lRightPos <FONT COLOR=#000080>Then</FONT>
GetNameInBrackets = _
Mid$(sSource, lLeftPos + 1, lRightPos - lLeftPos - 1)
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>
<FONT COLOR=#808080></FONT>

</FONT></PRE>

bzw.

falls du den Wert "[HuB] Player" benötigst UND der Name immer am Anfang des Strings steht UND immer mit "<" endet, geht's wie folgt:

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Sub</FONT> Beispiel()

Debug.<FONT COLOR=#000080>Print</FONT> _
GetName("[HuB] Player<419><202614><>")

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Function</FONT> GetName(<FONT COLOR=#000080>ByVal</FONT> sSource <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>


GetName = VBA.Left$(sSource, InStr(sSource, "<") - 1)


<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>
<FONT COLOR=#808080></FONT>

</FONT></PRE>
Gruß

Zapfen
05.05.2001, 12:35
das problem dabei ist aber, daß der name auch ">" "<" enthalten kann, deshalb kann es zu problemen kommen....

z.b. so:
L 04/25/2001 - 20:02:02: " <2die4>Player<419><202614><>" entered the game

dann ist der name nemlich = ""

und die zahlen hinter dem namen können auch unterschiedlich lang sein....

damke schonmal.

Alexander Jan Peters
05.05.2001, 14:47
<font color="#000000" size="2" face="Tahoma">Hallo,

welche Teile innerhalb des Strings sind den (zumindest vom Aufbau her) konstant? Darum geht es doch eigentlich, einen Fixpunkt zu finden, an dem man sich beim Suchen orientieren kann.

Gruß

A.J. Peters</p></font>

[Dieser Beitrag wurde von Alexander Jan Peters am 05.05.2001 editiert.]

Zapfen
06.05.2001, 18:43
gleich sind am anfang das datum und die zeit, also:
L 04/25/2001 - 20:02:02: "
bis zum ", danach kommt der name

am ende ist auf jeden fall das:
" entered the game

dazwischen ist ebend der name und in den klammern ein zahlcode von dem ich aber keine ahnung habe:
[HuB] Player<419><202614><>

ich hoffe du kannst mir helfen
Zapfen

Stefan Kulpa
07.05.2001, 06:48
Hallo Zapfen,

wenn ich das richtig verstanden habe, suchst Du den Wert zwischen dem ersten Anführungszeichen und dem ersten Auftreten von < !?

Falls ja, geht's so:

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Option</FONT> <FONT COLOR=#000080>Explicit</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Sub</FONT> Test()

<FONT COLOR=#008000>'1: L 04/25/2001 - 20:02:02: "[HuB] Player<419><202614><>" entered the game</FONT>
<FONT COLOR=#008000>'2: L 04/25/2001 - 20:02:02: " <2die4>Player<419><202614><>" entered the game</FONT>

<FONT COLOR=#000080>Dim</FONT> sBeispiel <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>
<FONT COLOR=#000080>Dim</FONT> sTeilStr <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>
<FONT COLOR=#000080>Dim</FONT> lOffSet1 <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>Dim</FONT> lOffSet2 <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#008000>'// =========================================================================</FONT>
<FONT COLOR=#008000>'// 1. Beispiel:</FONT>
<FONT COLOR=#008000>'// =========================================================================</FONT>
sBeispiel = "L 04/25/2001 - 20:02:02: " & Chr(34) & _
"[HuB] Player<419><202614><>" & Chr(34) & _
" entered the game"
Debug.<FONT COLOR=#000080>Print</FONT> sBeispiel
lOffSet1 = InStr(sBeispiel, Chr(34)) <FONT COLOR=#008000>'= " -Zeichen</FONT>
lOffSet2 = InStr(sBeispiel, Chr(60)) <FONT COLOR=#008000>'= < -Zeichen</FONT>
<FONT COLOR=#000080>If</FONT> lOffSet1 > 0 <FONT COLOR=#000080>And</FONT> _
lOffSet2 > 0 <FONT COLOR=#000080>And</FONT> _
lOffSet2 > lOffSet1 <FONT COLOR=#000080>Then</FONT>
sTeilStr = _
Trim$(Mid$(sBeispiel, lOffSet1 + 1, lOffSet2 - lOffSet1 - 1))
<FONT COLOR=#000080>If</FONT> Len(sTeilStr) > 0 <FONT COLOR=#000080>Then</FONT>
MsgBox "Teilnehmer: " & sTeilStr
<FONT COLOR=#000080>Else</FONT>: MsgBox "Kein Teilnehmer!"
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#008000>'// =========================================================================</FONT>
<FONT COLOR=#008000>'// 2. Beispiel:</FONT>
<FONT COLOR=#008000>'// =========================================================================</FONT>
sBeispiel = "L 04/25/2001 - 20:02:02: " & Chr(34) & _
" <2die4>Player<419><202614><>" & Chr(34) & _
" entered the game"
Debug.<FONT COLOR=#000080>Print</FONT> sBeispiel
lOffSet1 = InStr(sBeispiel, Chr(34)) <FONT COLOR=#008000>'= " -Zeichen</FONT>
lOffSet2 = InStr(sBeispiel, Chr(60)) <FONT COLOR=#008000>'= < -Zeichen</FONT>
<FONT COLOR=#000080>If</FONT> lOffSet1 > 0 <FONT COLOR=#000080>And</FONT> _
lOffSet2 > 0 <FONT COLOR=#000080>And</FONT> _
lOffSet2 > lOffSet1 <FONT COLOR=#000080>Then</FONT>
sTeilStr = _
Trim$(Mid$(sBeispiel, lOffSet1 + 1, lOffSet2 - lOffSet1 - 1))
<FONT COLOR=#000080>If</FONT> Len(sTeilStr) > 0 <FONT COLOR=#000080>Then</FONT>
MsgBox "Teilnehmer: " & sTeilStr
<FONT COLOR=#000080>Else</FONT>: MsgBox "Kein Teilnehmer!"
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080></FONT>

</FONT></PRE>

Gruß

Alexander Jan Peters
07.05.2001, 11:36
<font color="#000000" size="2" face="Tahoma">Hallo Stefan,

also, wenn ich das richtig verstanden habe, sucht er den Teil zwischen den ersten Anführungsstrichen und dem Wort Player:
L 04/25/2001 - 20:02:02: " <u><2die4></u> Player<419><202614><>" entered the game
Mit dieser kleinen Korrektur Deines Codes sollte das eigentlich machbar sein.</font>
<font color="#000000" size="2" face="Courier New">
lOffSet1 = InStr(sBeispiel, Chr(34)) '= " -Zeichen
lOffSet2 = InStr(sBeispiel, "Player") '= Player -Zeichenfolge</font>
<font color="#000000" size="2" face="Tahoma">
Gruß

A.J. Peters</p></font>

Zapfen
07.05.2001, 17:10
nein nein, Player gehört auch zum namen!!!