Von VB generierte txt/ini mit JS/C# auslesen.

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Von VB generierte txt/ini mit JS/C# auslesen.

    Hi,

    ich Programmiere zurzeit ein RTS Game mit Unity3D und Visual Basic 2010. Jedoch kann ich JS noch nicht so gut und habe folgendes Problem:

    Ein Game Launcher (VB.NET) speichert Settings in einer .txt oder .ini Datei. Diese soll in Unity3D wieder Zeile für Zeile ausgelesen werden. Danach sollen IF-Abfragen an jede Zeile gestellt werden.
    Unity unterstützt leider nur C# und JS.

    Ich bin über Google auf den Code [C#] hier gestoßen:

    VB.NET-Quellcode

    1. var fileName = "settings.txt";
    2. function Start () {
    3. var sr = new StreamReader(Application.dataPath + "/" + fileName);
    4. var fileContents = sr.ReadToEnd();
    5. sr.Close();
    6. var lines = fileContents.Split("\n"[0]);
    7. for (line in lines) {
    8. print (line);
    9. }
    10. }


    Da meine JS Kenntnisse stark begrenzt sind kann ich zwar erraten wo das Problem liegt, jedoch dank mangelnder Beschreibung keine Lösung dafür finden.

    Ich hoffe das mir jemand hier weiterhelfen kann. Evtl hat ja auch jmd ein neuen Vorschlag. ;)

    mfg Tixewi

    ---

    EDIT

    So nochmal neu Formuliert:

    Ich möchte eine Textdatei oder Inidatei mit C# Zeile für Zeile auslesen und manche Zeilen in einem String speichern.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Nimm den C#-Code.
    Den kannst Du mit diesem Translator leicht nach VB und zurück konvertieren.
    Oder diesem
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin auf einen sehr Simplen, verständlichen und natürlich funktionierenden Code gestoßen:

    VB.NET-Quellcode

    1. Dim reader As New IO.StreamReader(PFAD ZUR TXT)
    2. dim src As String = reader.readToEnd
    3. reader.close
    4. dim s() As string = Split(src,VbNewLine)
    5. label1.text = s(0)
    6. label2.text = s(1)
    7. label3.text = s(2)
    8. label4.text = s(3)
    9. label5.text = s(4)


    Ich hoffe das Thema hat sich damit erledigt, wenn nicht Poste ich nochmal hier rein.

    Danke für eure Hilfe ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tixewi“ ()

    Ok so weit so gut:

    Ein Error habe ich jetzt in Unity mit folgendem Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. using UnityEngine;
    2. using System.Collections;
    3. using System.IO;
    4. public class splashscreen : MonoBehaviour {
    5. public float timer = 2f;
    6. public string levelToLoad = "menu";
    7. // Use this for initialization
    8. void Start () {
    9. StartCoroutine("DisplayScene");
    10. //Begriffe festlegen
    11. string resolution = null;
    12. string graphic = null;
    13. string sound = null;
    14. string language = null;
    15. string map = null;
    16. string age = null;
    17. string finage = null;
    18. string mode = null;
    19. string player_name = null;
    20. string player_civ = null;
    21. string player2_diff = null;
    22. string player2_civ = null;
    23. string player3_diff = null;
    24. string player3_civ = null;
    25. string player4_diff = null;
    26. string player4_civ = null;
    27. //Text auslesen und Splitten
    28. System.IO.StreamReader reader = new System.IO.StreamReader(System.Environment.CurrentDirectory + "/" + "settings.txt");
    29. string src = reader.ReadToEnd();
    30. reader.Close();
    31. string[] s = Strings.Split(src, Constants.vbNewLine);
    32. //Brauchbare Informationen in Strings speichern
    33. resolution = s[1];
    34. graphic = s[2];
    35. sound = s[3];
    36. language = s[4];
    37. map = s[7];
    38. age = s[8];
    39. finage = s[9];
    40. mode = s[10];
    41. player_name = s[13];
    42. player_civ = s[14];
    43. player2_diff = s[17];
    44. player2_civ = s[18];
    45. player3_diff = s[21];
    46. player3_civ = s[22];
    47. player4_diff = s[25];
    48. player4_civ = s[26];
    49. }
    50. IEnumerator DisplayScene() {
    51. yield return new WaitForSeconds(timer);
    52. Application.LoadLevel(levelToLoad);
    53. }
    54. }



    und zwar: Assets/splashscreen.cs(43,22): error CS0103: The name `Strings' does not exist in the current context
    bezogen auf:

    VB.NET-Quellcode

    1. string[] s = Strings.Split(src, Constants.vbNewLine);


    In Visual Basic hat der Code jedoch funktioniert.
    Ja, in VB hieß es:

    VB.NET-Quellcode

    1. 'Text auslesen und Splitten
    2. Dim reader As New IO.StreamReader(System.Environment.CurrentDirectory & "/" & "settings.txt")
    3. Dim src As String = reader.ReadToEnd
    4. reader.Close()
    5. Dim s() As String = Split(src, vbNewLine)


    dann hab ich es in C# "übersetzt" und dann kam dabei folgendes raus:

    VB.NET-Quellcode

    1. //Text auslesen und Splitten
    2. System.IO.StreamReader reader = new System.IO.StreamReader(System.Environment.CurrentDirectory + "/" + "settings.txt");
    3. string src = reader.ReadToEnd();
    4. reader.Close();
    5. string[] s = Strings.Split(src, Constants.vbNewLine);


    Edit: Weis jmd was in C# daran falsch ist?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tixewi“ ()

    Hmm da kommt wieder eine Error Meldung:
    Assets/splashscreen.cs(43,22): error CS0103: The name `String' does not exist in the current context

    Edit: Ich habe String mal klein geschrieben und dann kam das raus:
    Assets/splashscreen.cs(43,29): error CS0120: An object reference is required to access non-static member `string.Split(params char[])'

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tixewi“ ()

    vbnewline, die vb6-Konstante, ist in .NET "Environment.NewLine". Das geht auch in VB.NET.
    Wenn du die Konstante nicht benutzen willst, kannst du in C# auch "\n\r" (mit ") schreiben.

    Das ist aber nicht dein Fehler. Der Fehler ist das 's' hinter "String".
    Von meinem iPhone gesendet
    Hm, in C# komme ich auf das:

    Quellcode

    1. string scr = reader.ReadToEnd();
    2. //reader.Close();
    3. string[] s = scr.Split('\n', '\r');
    4. //Wie man jetzt genau nach "NewLine" splittet weiß ich auch nicht.
    5. //Möglicherweise reicht scr.Split('\n') auch schon.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Tixewi schrieb:

    Ähm wenn ich die neue Error Meldung richtig verstehe
    Hast du nicht.

    Tixewi schrieb:

    Assets/splashscreen.cs(43,29): error CS0120: An object reference is required to access non-static member `string.Split(params char[])'
    Du brauch eine Objektinstanz des Strings, wen du splitten willt.

    C-Quellcode

    1. string wat = "s,i,n,e,p";
    2. string[] splittedSinep = wat.Split(',');
    Von meinem iPhone gesendet
    Wenn Du so fragst:

    Quellcode

    1. String Contents = System.IO.File.ReadAllText("Pfad", System.Text.Encoding.Default);
    2. String[] SplittedContents = Contents.Split('Zeichen');
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    sry aber ich verstehe dein code nicht, kann den mir jmd erklären?

    EDIT

    So nochmal neu Formuliert:

    Ich möchte eine Textdatei oder Inidatei mit C# Zeile für Zeile auslesen und manche Zeilen in einem String speichern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tixewi“ ()