Speciaal teken vervangen

Status
Niet open voor verdere reacties.

murdoch201

Gebruiker
Lid geworden
31 mei 2008
Berichten
336
Hoi,

Ik ben bezig met een systeem met online gebruikers. Ik ben nu bezig met de lijst met gebruikers die online zijn. De gebruikers die gratis spelen, krijgen "" rond hun naam. ("Henk" bv.). De spelers die betalen hebben geen speciale tekens en dragen gewoon hun naam. Aangezien VB6 nog werkt met list indexes als je wilt toevoegen of verwijderen, heb ik het zo gedaan:
Wanneer een gebruiker binnenkomt, schrijft hij de naam van de gebruiker naar een bestandje. Hij voegt deze ook toe aan de listbox. Van zodra een gebruiker weggaat, word zijn naam weggeknipt met Replace() uit het bestandje, word de lijst met gebruikers geleegd, en opnieuw geladen met de namen uit het bestandje. Helaas, wilt hij een gebruiker met "" rond zijn naam niet goed Replacen.

Het komt er dus op neer, dat ik een een string met "" erin moet vervangen met leegte.

Code:
Dim userlist as string
userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), "")
In dit gevaal heet de gebruiker dus eventjes "Henk"

Dit is het resultaat dat ik krijg:
Code:
Henk

Hoe ik het graag zou hebben:
Code:
(absolute leegte)

Ik hoop dat ik het een beetje duidelijk heb uitgelegd. Als je het niet snapt, begin je gewoon maar bij het Het-komt-er-dus-op-neer gedeelte ;)

Iemand die mij kan helpen?

Groetjes,
murdoch
 
Laatst bewerkt:
Maak van "" eens vbNullString.
 
Ok, dan kan ik er verder weinig van zeggen zonder de rest van de code te zien.
Wordt bijvoorbeeld de wijziging wel weg geschreven voordat je het bestandje opnieuw laadt?
Kijk eens in Debug Mode wat er precies gebeurd.
 
HTML:
Private Sub sdk_EventAvatarDelete()

Dim pstrFilename As String
pstrFilename = App.Path & "\users.list"

Dim userslist As String
Open pstrFilename For Input As #1
Do Until EOF(1)
        Input #1, Data
        userslist = userslist + Data + vbNewLine
    EOF (1)
    Loop
    Close #1
userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), vbNullString)
    Open pstrFilename For Output As #1
        Print #1, userslist
    Close #1
    
    List1.Clear
    
    Open pstrFilename For Input As #1
Do Until EOF(1)
        Input #1, Data
        If Not Data = "" Then
        userslist = userslist + Data
        List1.AddItem (Data)
        End If
    EOF (1)
    Loop
    Close #1

'nog een hoop code, niet van belang
End Sub

Hij opent dus eerst het bestand, laad de inhoud in de string 'userlist', vervangt in die string de gebruikersnaam met leegte, opent het bestand terug en laad userlist in de list.
 
Dat ziet er op zich goed uit maar wat precies de waarden voor en na replace zijn kun je het beste in debug mode bekijken.
Speel ook eens met de vergelijkingsmethode:
Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), vbNullString,,,VBBinaryCompare)

Of:
Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), vbNullString,,,VBTextCompare)
 
Beide codes helpen helaas ook niet. Hoe werkt die debug modus precies? Mijn watch venster verdwijnt iedere keer.
 
Welke versie van Visual Basic gebruik je?
 
Ok, nu heb ik er eventjes dit van gemaakt:

Code:
Dim pstrFilename As String
pstrFilename = App.Path & "\users.list"

Dim userslist As String
Open pstrFilename For Input As #1
Do Until EOF(1)
        Input #1, Data
        If Not Data = "" Then
        MsBox(Data)
        userslist = userslist + Data + vbCrLf
        End If
    EOF (1)
    Loop
    Close #1
userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), "")
Debug.Print "Resultaat: " & userlist

Debug venster geeft dit:
Code:
Resultaat:

De string is dus om de een of andere reden leeg.
Nochtans duiken die Messageboxen met Data keurig op.
 
In de Debug.Print staat userlist en je variabele heet userslist.
Met een extra s dus.
Dit soort problemen met niet gedeclareerde variabelen kun je voorkomen door altijd Option Explicit te gebruiken.
http://msdn.microsoft.com/en-us/library/y9341s4f(v=vs.80).aspx

Aanvulling:
Verder zou ik de 2e EOF(1) verwijderen.
De replace zou ik wijzigen van userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME), "")
In userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME)+vbCrLf, "")
 
Laatst bewerkt:
2de EOF(1) verwijderd, regel vervangen met + vbCrLf, helaas, nog altijd niks :(
 
Vreemd, ik heb je code gekopieerd en aangepast zoals aangegeven.
Bij mij werkt het prima.
Kun je je stukje code nog een keer plaatsen zoals het nu is?
 
Code:
Dim pstrFilename As String
pstrFilename = App.Path & "\users.list"

Dim userslist As String
Open pstrFilename For Input As #1
Do Until EOF(1)
        Input #1, Data
        If Not Data = "" Then
        userslist = userslist + Data + vbCrLf
        End If
    EOF (1)
    Loop
    Close #1
userslist = Replace(userslist, SDK.aw_string(AW_AVATAR_NAME) + vbCrLf, "")
Debug.Print "Resultaat: " & userslist
    Open pstrFilename For Output As #1
        Print #1, userslist
    Close #1
    
    List1.Clear
    
    Open pstrFilename For Input As #1
Do Until EOF(1)
        Input #1, Data
        If Not Data = "" Then
        userslist = userslist + Data
        List1.AddItem (Data)
        End If
    Loop
    Close #1
 
Wat is op runtime de waarde van DK.aw_string(AW_AVATAR_NAME) ?
 
De naam van de gebruiker die net vertrokken is. Dus gewoon jantje, of "jantje" als het een gratis gebruiker is.
 
Ok. Ik heb dat object natuurlijk niet dus ik had dat even in een andere variabele gezet.
Kun je ook even de (gedeeltelijk) de inhoud van bestandje users.list laten zien?
Ik had deze even met kladblok aangemaakt en gevuld en wil graag zien of de layout goed is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan