Kirjoittaja: Pöytälamppu
Kirjoitettu: 15.06.2006 – 15.06.2006
Tagit: koodi näytille, vinkki
Yksinkertainen käyttäjälista, joka on dynaaminen. Mielestäni erittäin simppeli jota voi soveltaa muihinkin tarkoituksiin. Sisältää kutsut käyttäjien lisäykseen,poistoon ja listaamiseen.
Edit. Korjattu virhe joka esti ainoan käyttäjän poistamisen
Edit 2. Korjattu virhe joka aiheutti virheen kutsuessa Listaa_käyttäjät ennen käyttäjien lisäämista
Edit 3. Nothing ei toiminutkaan ihan samanlailla kuin muistin
Moduuliin (selkeyden vuoksi)
'Tehdään jokaiselle käyttäjälle tyyppi
Type Käyttäjä
'Joka sisältää käyttäjän nickin
name As String
'ja tiedon esim missä soketissa se on
id As Integer
End Type
Dim Käyttäjät() As Käyttäjä
Dim Käyttäjät_on_alustettu As Boolean
Dim onko_tyhjä As Boolean
Sub Lisää_käyttäjä(Nimi As String, Optional id As Integer = 0)
If Not Käyttäjät_on_alustettu Then
'luodaan taulukko
Käyttäjät_on_alustettu = True
ReDim Käyttäjät(0)
Else
If Not onko_tyhjä Then
'Kasvatetaan Käyttäjien_nimet taulukkoa yhdellä niin, että vanhat tiedot
ReDim Preserve Käyttäjät(UBound(Käyttäjät) + 1)
End If
End If
'Sijoitetaan taulukon viimeiseen kohtaan uusi käyttäjä
Dim temp As Käyttäjä
temp.name = Nimi
temp.id = id
Käyttäjät(UBound(Käyttäjät)) = temp
onko_tyhjä = False
End Sub
Sub Poista_käyttäjä_id(id As Integer)
Dim i As Integer
If Not Käyttäjät_on_alustettu Then Exit Sub
'käydään kaikki käyttäjät läpi
For i = 0 To UBound(Käyttäjät)
'ja verrataan sitä etsittyyn nimeen
If (Käyttäjien_nimet(i).id = id) Then
'jos täsmää niin poistetaan nimi luettelosta (siirretään alemmat askeleen ylemmäs)
Dim e As Integer
For e = i To UBound(Käyttäjät) - 1
Käyttäjät(e) = Käyttäjät(e + 1)
Next
'pienennetään taulukkoa yhdellä
If Not UBound(Käyttäjät) = 0 Then
ReDim Preserve Käyttäjät(UBound(Käyttäjät) - 1)
Else
onko_tyhjä = True
End If
Exit Sub
End If
Next
End Sub
Sub Poista_käyttäjä_name(name As String)
Dim i As Integer
If Not Käyttäjät_on_alustettu Then Exit Sub
'käydään kaikki käyttäjät läpi
For i = 0 To UBound(Käyttäjät)
'ja verrataan sitä etsittyyn nimeen
If (Käyttäjät(i).name = name) Then
'jos täsmää niin poistetaan nimi luettelosta
Dim e As Integer
For e = i To UBound(Käyttäjät) - 1
Käyttäjät(e) = Käyttäjät(e + 1)
Next
'pienennetään taulukkoa yhdellä jos voidaan
If Not UBound(Käyttäjät) = 0 Then
ReDim Preserve Käyttäjät(UBound(Käyttäjät) - 1)
Else
onko_tyhjä = True
End If
Exit Sub
End If
Next
End Sub
Function Get_käyttäjä_name(name As String) As Käyttäjä
Dim i As Integer
If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
Exit Function
End If
'käydään kaikki käyttäjät läpi
For i = 0 To UBound(Käyttäjät)
'ja verrataan sitä etsittyyn nimeen
If (Käyttäjät(i).name = name) Then
'palautetaan kayttäjä
Get_käyttäjä_name = Käyttäjät(i)
Exit Function
End If
Next
End Function
Function Get_käyttäjä_id(id As Integer) As Käyttäjä
Dim i As Integer
If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
Exit Function
End If
'käydään kaikki käyttäjät läpi
For i = 0 To UBound(Käyttäjät)
'ja verrataan sitä etsittyyn nimeen
If (Käyttäjät(i).id = id) Then
'palautetaan kayttäjä
Get_käyttäjä_name = Käyttäjät(i)
Exit Function
End If
Next
End Function
Function Listaa_käyttäjät(Optional Erotin As String = vbCrLf) As String
Dim i As Integer
Dim retuni As String
If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
Listaa_käyttäjät = ""
Exit Function
End If
'käydään kaikki käyttäjät läpi
For i = 0 To UBound(Käyttäjät)
If i = 0 Then
'ja lisätään returniin ilman erotinta
retuni = Käyttäjät(i).name
Else
'ja lisätään returniin erottimen kanssa
retuni = retuni & Erotin & Käyttäjät(i).name
End If
Next
Listaa_käyttäjät = retuni
End FunctionKäyttö
Lisää_käyttäjä "mikko" 'lisätään mikko
Lisää_käyttäjä "seppo" 'ja seppo
msgbox Listaa_käyttäjät("|") '(Erottimeksi "|") tulee mikko|seppo
Lisää_käyttäjä "teppo" 'lisätään teppo
Poista_käyttäjä_name "seppo"
msgbox Listaa_käyttäjät("|") 'tulee mikko|teppoOlisiko mitenkään mahdollista laskea nimien määrän?
eli siis "/liityn|mikko|esko|saku|sanna" tuon /liityn jälkeen niin pitäisis saada selville, että siinä on 4 nimeä.
kayttaja-3842:
Dim Users As String
Dim Maara As Long
Dim tmp As Variant
Dim i As Long
Users = Listaa_käyttäjät("|")
i = 1
Do
tmp = InStr(i, Users, "|")
If tmp <> 0 Then Maara = Maara + 1
i = i + 1
Loop While tmp <> 0EDIT: Typo koodissa
Minkänimisee tiedostoo tää pitää tallentaa?
stere:
Saat käsiisi merkkijonon. Voit tallentaa sen vaikka kuvaksi jos haluat. Itse tykkään kryptata merkkijonon Xorilla ja muilla jutuilla ja tökätä tuloksen .dat, .bin tai .sys tiedostoon.
Numero on sama kuin Helsingin perustamisvuosi \o/