Het verkleinen van een string

Status
Niet open voor verdere reacties.

dadio25

Gebruiker
Lid geworden
17 mrt 2009
Berichten
39
hallo,

Ik heb een string(nieuwe positie) die eruit ziet als: Channel_0_User_Defined.User.User1

en deze wil ik gaan verkleinen. Dit kan ik doen door gebruik te maken van strings die ik vind met een For loop.
namelijk:

Code:
For Each vName In OPCMyBrowser
    comparestring = "" + vName
    If Left(nieuwepositie, Len(comparestring)) = comparestring Then: bfound = True: Exit For
Next vName

ik vergelijk in feite de linkerkant van nieuwepositie met de gevonden vName als dit klopt exit ik de for loop.

daarna ga ik deze string verkleinen.

Code:
        comparestring = "" + Mid(nieuwepositie, (Len(comparestring) + 2))
        nieuwepositie = comparestring

Dit moet ik in feite blijven doen tot lengte van de string 0 is.

Hiervoor is er een Do while loop aanwezig.

Code:
        If bfound Then
           Do While (Len(NormalPosition)) > 0
                OPCMyBrowser.MoveDown (comparestring)
                comparestring = "" + Mid(NormalPosition, (Len(comparestring) + 2))
                NormalPosition = comparestring
        Loop
Else
    
    MsgBox "No Match was Found for " & NormalPosition, vbInformation, "Match Failure"

End If
Mijn probleem is dat het me niet lukt om een goede loop op te zetten om dit te doen, want om elke keer erachter te komen waarmee ik hem moet verkleinen moet ik die for loop weer aanroepen. En ik weet niet hoe ik dit het beste kan doen.

Ik hoop dat jullie genoeg hebben aan de code die ik gegeven heb als je meer nodig heb kan je dat gewoon vragen.

groeten dadio25
 
Laatst bewerkt:
Je hoeft geen Einstein te zijn om te zien dat

Code:
For Each vName In OPCMyBrowser
    comparestring = "" + vName
    If Left(nieuwepositie, Len(comparestring)) = comparestring Then: bfound = True: Exit For
Next vName

hetzelfde is als

Code:
For Each vName In OPCMyBrowser
  if nieuwepositie=vName then exit for
Next
Maar wellicht wel om de zin van deze ogenschijnlijk zinloze exercities te doorgronden.
 
Laatst bewerkt:
Deze exercities zijn een onderdeel van mijn verdere programma.

Ik heb die string nieuwepositie waar in staat waar ik in principe naar toe moet. Mijn positie zou je kunnen zien als:

In de map: Channel_0_User_Defined zit ik in de map: User op item User1.

Met de for loop zoek ik naar de beschikbare namen. deze vergelijk ik met de linkerkant van de string nieuwepositie. Mocht dit waar zijn dan heb ik de juiste mapnaam en kan ik via deze naam de map "openen". In deze map staan weer allerlei namen die ik door middel van de for loop wil doorlopen en vergelijken and so on totdat ik op het item ben gekomen deze haal ik ook nog uit de string zodat mijn do while loop zal stoppen.

Zijn deze exercities nu wat minder onzinnig.......;)
 
hmmm ok,

dan krijg je de volledige code..... voor dit gedeelte

Code:
Dim itemnaam As String
Dim nieuwepositie As String
Dim countbranches As Long
Dim countleafs As Long
Dim comparestring As String
Dim bfound As Boolean
Dim eindpositie As String
Dim toevoegitem As String

itemcount = 16
itemnaam = SelectedItem.Text

On Error GoTo ShowOPCItemAddError

OPCMyBrowser.MoveToRoot

If Len(itemnaam) > Len(SrvName) Then

nieuwepositie = Mid(itemnaam, (Len(SrvName) + 2))
SelectedItem.Text = "" + nieuwepositie

End If

OPCMyBrowser.showbranches
countbranches = OPCMyBrowser.Count
OPCMyBrowser.showleafs
countleafs = OPCMyBrowser.Count

If countbranches > 0 And countleafs = 0 Then
    OPCMyBrowser.showbranches
    
For Each vName In OPCMyBrowser
    comparestring = "" + vName
    If Left(nieuwepositie, Len(comparestring)) = comparestring Then: bfound = True: Exit For
Next vName

   If bfound Then
        Do While (Len(nieuwepositie)) > 0
            
                OPCMyBrowser.movedown (comparestring)
                comparestring = "" + Mid(nieuwepositie, (Len(comparestring) + 2))
                nieuwepositie = comparestring
                
                OPCMyBrowser.showbranches
                countbranches = OPCMyBrowser.Count
                OPCMyBrowser.showleafs
                countleafs = OPCMyBrowser.Count
                GoTo getnaam:
verdergaan:
            
            
            If (countbranches > 0 And countleafs > 0) And (nieuwepositie <> ("_Hints")) Then
                eindpositie = nieuwepositie
                comparestring = "" + Mid(nieuwepositie, (Len(comparestring) + 2))
                nieuwepositie = comparestring
                End If
        Loop
Else
    
    MsgBox "No Match was Found for " & nieuwepositie, vbInformation, "Match Failure"

End If


getnaam:

If (countbranches = 0 And countleafs > 0) Then
    OPCMyBrowser.showleafs
ElseIf (countbranches > 0 And countleafs > 0) And (nieuwepositie <> ("_Hints")) Then
    OPCMyBrowser.showleafs
ElseIf (countbranches > 0 And countleafs > 0) And (nieuwepositie = ("_System")) Then
    OPCMyBrowser.showbranches
Else
    OPCMyBrowser.showbranches
    End If
For Each vName In OPCMyBrowser
    comparestring = "" + vName
    If StrComp(Left(nieuwepositie, Len(comparestring)), comparestring) = 0 Then: bfound = True: Exit For
Next vName
If bfound Then
GoTo verdergaan:

End If
End If

Dit probeer ik te doen op het moment.....
 
Al je in een tekstreeks een aantal mapnamen hebt staan gescheiden door een teken (een backslash bijvoorbeeld)
kom je er toch achter of die map bestaat met

Code:
c0=createobject("scripting.filesystemobject").folderexists("E:\OF\test")
 
Als ik daadwerkelijk zou zoeken naar filenamen wel. Dat was een voorbeeld om te illustreren hoe de naam van de string nieuwepositie is opgebouwd.

en hoe de opbouw is van hetgene waarin ik zit te zoeken.

De namen binnen deze string worden gescheiden dmv een "." Maar ik kan deze namen via de OPCMyBrowser op vragen dmv die For loop.

Ik heb een voorbeeldje erbij gedaan van hoe de structuur eruit ziet van wat ik aan het doorzoeken ben.
 

Bijlagen

  • voorbeeld2.JPG
    voorbeeld2.JPG
    19,3 KB · Weergaven: 27
Ik heb het niet over bestandsnamen maar over mapnamen, zolas jij ook eerder in je post.
En voor zover ik weet is de struktuur die je toont een mappenstruktuur.

Als je tekstreeks gescheiden is door punten vervang je die toch door backslashes ?

Code:
c0=createobject("scripting.filesystemobject").[B][COLOR="Blue"]folder[/COLOR][/B]exists(replace("E:.OF.test",".","\"))
 
Hmmm,

Je snapt me niet. Ik zoek niet op mapnamen ofzo. Dit was alleen een voorbeeldje om duidelijk te maken hoe de structuur in elkaar zit wat ik probeer te doorzoeken. Wat ik probeer te doorzoeken maakt geen gebruik alleen gebruik van een zelfde soort hierarchy.

Daarom gebruikte ik het als voorbeeld. Maar goed.

Wat ik eigenlijk probeer te doen is als ik op de knop om een item toe te voegen aan mijn OPC client. Dat er dan via de OPCBrowser naar de plaats binnen de OPC server gegaan wordt.

En ik weet dat er dan gevraagd zou worden wat OPC client, browser en server zijn. Ik kan wel een link sturen met uitleg alleen hier heb je vrij weinig aan mits je de OPCdaauto.dll op je pc hebt en dezelfde OPCserver als ik gebruik......

Maar goed
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan