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 Function
Kä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|teppo
Olisiko 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 <> 0
EDIT: 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/