Problem mit doppelter For-Schleife

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    Problem mit doppelter For-Schleife

    Hallo, Leute!

    Ich versuche derzeit ein Programm zu schreiben, dass den Admins meines "Clans" im Spiel COunter-Strike: Source das einstellen der User mit administrativen Rechten auf den Spiele Servern einzustellen.
    Das Speichern und Abrufen der Daten in txt-Form an sich funktioniert, jedoch müssen diese Daten auch als "clients.txt" in verschiedenen Ordner auf einem FTP mit entsprechendem Inhalt gespeichert werden.

    Der Syntax dieser Dateien sieht so aus:


    "clients.txt"
    {
    "version" "1"
    "players"

    //Clients.txt generiert mit ClientCreator v.1.0.0.1 by 7272 Momo
    //Hier kommen die Admins

    "user"

    {

    "steam" "Usernummer"
    "groups"

    {

    "Admin" "Rechte-Einstufung"
    "Immunity"""

    }

    }


    //Hier kommen die Admingruppen

    "groups"

    {

    "Immunity"

    {

    "Serveradmin""a b c d e f h i j k l m n o p q r s t u v x y afk ping autojoin grav Immunity"

    }

    "Admin"

    {
    "Serveradmin" "k r q e m b s o a c p w z x y i l f t d g j R v V Q C A B D E F G H I J K L M N O T U W X Y admin grav pban spray"
    "Hauptadmin" "k r q e m b s o a c p w z x y i l f t d g j R v V Q C A B D E F G H I J K L M N O T U W X Y admin grav pban spray"
    "Coadmin" "k q e m b s c p y i l f t d g j v V C B D E F G I T U W Y admin"
    "Basis" "k c g E s admin"
    }
    }
    }

    DAS muss im Endeffekt in den Dateien drinstehen. Wie genau ich User-Name und -Nummern auslese, habe ich schon per For-Schelife in einem früheren Projekt gelöst.

    Das neue Problem: Ich muss diese For-Schleife ("pro User") in einer weiteren For-Schleife ("pro Server") ausführen lassen.

    Mein Code bis jetzt: (Ich HOFFE, dass der Code richtig angezeigt wird, da er komischerweise bei meinen Posts nie richtig angezeigt wird :()

    VB.NET-Quellcode

    1. Public Class Fortschritt
    2. 'Dim server As String = ""
    3. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 'Exportiere Server-Clients.txt Dim Success As Boolean = True Dim Count As Integer = 1 Dim Servers() As String = {"assault", "buzzkill", "deathmatch", "glass", "gungame", "minigame", "naps", "pool", "rats", "seek", "surf", "zombiemod"} For Each server In Servers Debug.WriteLine(server) System.IO.File.WriteAllText("clients.txt", "") Dim sw As New System.IO.StreamWriter("clients.txt") sw.Write( _ Chr(34) & "clients.txt" & Chr(34) & vbCrLf & _ "{" & vbCrLf & _ vbTab & Chr(34) & "version" & Chr(34) & " " & Chr(34) & "1" & Chr(34) & vbCrLf & _ vbTab & Chr(34) & "players" & Chr(34) & vbCrLf & _ vbCrLf & _ vbTab & "{" & vbCrLf & _ vbCrLf & _ vbTab & vbTab & "//Clients.txt generiert mit GGP-Userbase v." & My.Application.Info.Version.ToString & " by 727 Momo" & vbCrLf & _ vbCrLf & _ vbTab & vbTab & "//---> Generiert: " & My.Computer.Clock.LocalTime.Date.ToString & vbCrLf & _ vbTab & vbTab & "//Clients.txt des Servers: " & server & vbCrLf & _ vbCrLf & _ vbTab & vbTab & "//Hier kommen die Admins" & vbCrLf & _ vbCrLf) For i As Integer = 0 To Form1.Admin.Rows.GetLastRow(DataGridViewElementStates.Visible) Dim Name As String = Form1.Admin.Item(0, Form1.Admin.Rows.Item(i).Index).Value Dim SteamID As String = Form1.Base.Item(5, Form1.Base.Rows.Item(i).Index).Value Dim Admin As String = Form1.Admin.Item(Count, Form1.Admin.Rows.Item(i).Index).Value sw.Write( _ vbTab & vbTab & Chr(34) & Name & Chr(34) & vbCrLf & _ vbCrLf & _ vbTab & vbTab & "{" & vbCrLf & _ vbCrLf & _ vbTab & vbTab & vbTab & Chr(34) & "name" & Chr(34) & vbTab & Chr(34) & Name & Chr(34) & vbCrLf & _ vbTab & vbTab & vbTab & Chr(34) & "steam" & Chr(34) & vbTab & Chr(34) & SteamID & Chr(34) & vbCrLf & _ vbTab & vbTab & vbTab & Chr(34) & "nick" & Chr(34) & vbTab & Chr(34) & Name & Chr(34) & vbCrLf & _ vbCrLf & _ vbTab & vbTab & vbTab & Chr(34) & "flags" & Chr(34) & vbCrLf & _ vbCrLf & _ vbTab & vbTab & vbTab & "{" & vbCrLf & _ vbCrLf) If Admin = "4" Then sw.Write(vbTab & vbTab & vbTab & vbTab & Chr(34) & "Admin" & Chr(34) & vbTab & Chr(34) & Form1.Priv_4.Text & Chr(34) & vbCrLf) End If If Admin = "3" Then sw.Write(vbTab & vbTab & vbTab & vbTab & Chr(34) & "Admin" & Chr(34) & vbTab & Chr(34) & Form1.Priv_3.Text & Chr(34) & vbCrLf) End If If Admin = "2" Then sw.Write(vbTab & vbTab & vbTab & vbTab & Chr(34) & "Admin" & Chr(34) & vbTab & Chr(34) & Form1.Priv_2.Text & Chr(34) & vbCrLf) End If If Admin = "1" Then sw.Write(vbTab & vbTab & vbTab & vbTab & Chr(34) & "Admin" & Chr(34) & vbTab & Chr(34) & Form1.Priv_1.Text & Chr(34) & vbCrLf) End If If Admin = "0" Then sw.Write(vbTab & vbTab & vbTab & vbTab & Chr(34) & "Admin" & Chr(34) & vbTab & Chr(34) & Form1.Priv_0.Text & Chr(34) & vbCrLf) End If sw.Write( _ vbTab & vbTab & vbTab & vbTab & Chr(34) & "Immunity" & Chr(34) & vbTab & Chr(34) & Chr(34) & vbCrLf & _ vbCrLf & _ vbTab & vbTab & vbTab & "}" & vbCrLf & _ vbCrLf & _ vbTab & vbTab & "}" & vbCrLf & _ vbCrLf) sw.Close() Next sw.Write( _ vbTab & "}" & vbCrLf & _ "}") sw.Close() 'Lade zum Server hoch Dim Client As New Net.WebClient Dim Cred As New Net.NetworkCredential("***", "***") Client.Credentials = Cred Client.UploadFile(New Uri("ftp://***/server/" & server & "/clients.txt"), "clients.txt") BackgroundWorker1.ReportProgress(100 / 12 * Count) Client.Dispose() Count += 1 Next If Success Then MsgBox("Alle clients.txt's erfolgreich gespeichert!", MsgBoxStyle.OkOnly, "Erfolg!") End If End Sub
    4. Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged ProgressBar1.Value = e.ProgressPercentage End Sub
    5. Private Sub Fortschritt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load BackgroundWorker1.RunWorkerAsync() End SubEnd Class



    Die For-Schleife ("pro Server") erledigt er ohne Probleme. Er schreibt auch alle StreamWriter-Einträge VOR und NACH der zweiten/eingeschlossenen For-Schleife ("pro User") in die Dateien und lädt diese Dateien auch korrekt hoch. Der Inhalt ist auch korrekt, jedoch fehlt der Inhalt der zweiten For-Schleife.

    Ich hoffe wirklich, dass mir hier jemand helfen kann, weil ich langsam daran verzweifle :(.

    MfG,
    X-Zat / Momo

    /Edit: Ich bekomme den Code nicht umformatiert, deswegen habe ich hier ein paar Screenshots:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „X-Zat“ ()

    füge den Code in Notepad ein(sodass er unformatiert ist) und dann erst hier, so hatte es zumindest bei mir funktioniert...ansonsten machst du die Zeilenumbrüche bitte manuell, ansonsten ist das wirklich Unleserlich...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Habe den Code nicht formatieren können, ohne, dass die Zeilenumbrüche wieder wegwaren. Habs auch ein paar Mal manuell versucht, aber es funktioniert einfach nicht :(.

    Ich hoffe, die angehängten Screenshots helfen... Ich habe wirklich keine Ahnung mehr, wie ich das Programm zum laufen bekomme, es will einfach nicht :(.
    Edit: Habe mein Problem gelöst:

    - BackgroundWorker entfernt
    - For-Schleife ("pro User") in einem eigenen Sub ausführen lassen, gesteuert von ->
    - Methode "WorksThroughServers", mit Integer und "If"-Verzweigung alle Server geprüft

    Trotzdem vielen Dank an euer Interesse an meinem Problem :). Konnte es zum Glück ja selbst lösen!

    MfG,
    X-Zat / Momo

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „X-Zat“ ()