Von VB generierte txt/ini mit JS/C# auslesen.
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.
-
-
-
-
Eingehend auf Deine PN erkläre ich den Code:
(Ich finde den C++/C Code Tag nicht, deshalb verwende ich den einfachen Code Tag
Ich gehe mal den Code von ganz vorne bis ganz hinten durch:
- "String"
String ist ein Typ und leitet (weil er am Anfang der Zeile steht) eine Deklaration ein. - "Contents"
gibt den Bezeichner der Variable an. - "="
leitet eine Zuweisung ein. - "System.IO.File.ReadAllText()" ist eine Funktion, die den Inhalt einer im Dateisystem gespeicherten Datei in Form eines Strings, entsprechend der übergebenen Kodierung zurückgibt.
- "Pfad"
soll den Pfad zur Datei darstellen, die Du einlesen willst.
Was das genau sein soll musst Du wissen. - "System.Text.Encoding.Default"
ist eine Kodierung, anhand der die entsprechenden Symbole der Bytefolge in der Datei ausgewählt werden. - ";"
schließt den Befehl ab. - "String"
String ist ein Typ und leitet (weil er am Anfang der Zeile steht) eine Deklaration ein. - "[]"
Gibt an, dass es sich um ein 1-dimensionales, unbestimmt langes Array des voranstehenden Typs handelt. - SplittedContents
gibt den Bezeichner der Variable an. - "="
leitet eine Zuweisung ein. - "Contents"
ist der Bezeichner einer Variable vom Typ String. - .Split()
ist eine Erweiterungsfunktion des String Typs, die ein Array von Strings zurückgibt.
Die einzelnen Strings des zurückgegebenen Arrays werden durch Teilen des Ausdruckes auf den die Funktion angewandt wird errechnet. - "'Zeichen'"
soll das Zeichen darstellen, an dem die .Split() Funktion den String teilen soll.
Die ' (einfaches Anführungszeichen) geben an, dass es sich bei dem enthaltenen Ausdruck um einen Ausdruck vom Typ Char (ein einzelnes Zeichen) handelt.
Ein Beispiel wäre: '\n' - ";"
schließt den Befehl ab.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils - "String"
-
Gebt es auf.Von meinem iPhone gesendet
-
Aufgeben tut man einen Brief"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
Ok gut danke für deine Beschreibung. Jetzt kommt mir jedoch die frage auf was '\n' oder '\s' usw ist und wiso geht z.b. '\f' nicht. Also wenn ich den Teil verstehen würde, könnte ich evtl auch mehr mit den beiträgen die ich in Google gefunden habe anfangen.
Zudem kommt hinzu das Unity mir das hier anzeigt:
Spoiler anzeigen
Assets/splashscreen.cs(18,29): error CS0236: A field initializer cannot reference the nonstatic field, method, or property `splashscreen.Contents'
-
'\n' sollte einen Zeilenumbruch darstellen.
Das \ stellt eine Escape Sequenz dar, wodurch das nachfolgende n nicht als n interpretiert wird, sondern entsprechend der Bedeutung des n als Zeilenumbruch.
Deine Fehlermeldung sagt Dir, dass ein Feldinitialisierer auf ein nichtstatisches Feld, auf eine nichtstatische Methode oder eine nichtstatische Eigenschaft zugreift.
Zusätzlich gibt sie Dir die Info, dass es sich um splashscreen.Contents handelt, also um
String Contents = System.IO.File.ReadAllText("Pfad", System.Text.Encoding.Default);
Kopiere bitte mal die Zeile wie Du sie im Code hast hier rein.
Edit: Oder
String[] SplittedContents = Contents.Split('Zeichen');
aber das wissen wir erst, wenn Du den Code kopiert hast.
Edit2:
Markiere auch bitte, welche Zeile die Zeile nr. 18 ist."Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
Ok, das ist der jetzige Code
und Zeile 18 ist:
Spoiler anzeigen
und hier nochmal der gesammte Code:
Quellcode
- using UnityEngine;
- using System.Collections;
- using System.IO;
- public class splashscreen : MonoBehaviour {
- public float timer = 2f;
- public string levelToLoad = "menu";
- // Use this for initialization
- void Start () {
- StartCoroutine("DisplayScene");
- }
- //Text auslesen und Splitten
- string Contents = System.IO.File.ReadAllText(System.Environment.CurrentDirectory + "/" + "settings.txt", System.Text.Encoding.Default);
- string[] SplittedContents = Contents.Split('\n');
- IEnumerator DisplayScene() {
- yield return new WaitForSeconds(timer);
- Application.LoadLevel(levelToLoad);
- }
- }
-
Ok, wie dieser Fehler behebbar ist ist mir unklar.
Anscheinend darfst Du nicht auf die Variable "Contents" zugreifen, weil diese nicht static ist (in VB: Shared).
Du kannst das Problem möglicherweise umgehen, indem Du Dir die Variable Contents sparst und direkt einsetzt:
Allerdings frage ich mich dann immer noch...
Ach sooooooo!!!!!!!11111
Du befindest Dich gar nicht in einer Ausführung!
Quellcode
- public class splashscreen : MonoBehaviour {
- public float timer = 2f;
- public string levelToLoad = "menu";
- // Use this for initialization
- void Start () {
- }
- //Text auslesen und Splitten
- string Contents = System.IO.File.ReadAllText(System.Environment.CurrentDirectory + "/" + "settings.txt", System.Text.Encoding.Default);
- string[] SplittedContents = Contents.Split('\n');
- IEnumerator DisplayScene() {
- }
- }
Merkst Du was?
Das Problem ist hier ganz einfach, dass Du hier global (in einer Klasse) arbeitest, und nicht lokal (in einer Sub/Function).
Du musst das Ganze umgestalten:
Quellcode
- public class splashscreen : MonoBehaviour {
- String Irgendwas1;
- String Irgendwas2;
- // Use this for initialization
- void Start () {
- StartCoroutine("DisplayScene");
- String Contents = System.IO.File.ReadAllText("Pfad", System.Text.Encoding.Default);
- String[] SplittedContents = Contents.Split('Zeichen');
- Irgendwas1 = SplittedContents[0];
- Irgendwas2 = SplittedContents[1];
- }
- }
So ähnlich!
Das soll nur ein Ansatz sein.
Suche Dir in
void Start () {
...
}
Deine Einstellungen raus und speichere sie in globalen Variablen (so wie Irgendwas1 und Irgendwas2)."Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
Jo danke, das ist genau das was ich gesucht habe
Jetzt sieht es aus wie mein vorheriger VB Code nur in C#
Ich glaub ich werde mich wohl noch etwas mit C# beschäftigen müssen. Naja ich schau mal das ich mir wieder VC#.NET runterlade und damit ein kleines Projekt mache.
Immerhin habe ich so auch VB gelernt.
Naja aber zuerst mache ich noch die ganzen IF-Abfragen rein, das kann ich immerhin in C# schon. -
Was ist der unterschied zwischen den folgenden 2 If-Abfragen (Außer die Sprache!)
und
Ich weis ja nicht ob VB und C# wirklich so unterschiedlich sind, aber kann es sein das ich in C# keine strings in If-Abfragen packen kann?
Unity will es überhaupt nicht akzeptieren.
Ich kann auch nicht irgendwelche anderen If-Abfragen mit dem String machen, weil er einfach Ignoriert wird... -
-
Hier nochmal mein Code, habe ich schon wieder was falsch gemacht?
Also mein letzten Fehler mit den falschen Klassen habe ich auf jeden Fall nich.
Spoiler anzeigen
Quellcode
- using UnityEngine;
- using System.Collections;
- using System.IO;
- public class splashscreen : MonoBehaviour {
- public float timer = 2f;
- public string levelToLoad = "";
- public string resolution;
- public string graphic;
- public string sound;
- public string language;
- public string map;
- // Use this for initialization
- void Start () {
- StartCoroutine("DisplayScene");
- string Contents = System.IO.File.ReadAllText(System.Environment.CurrentDirectory + "/" + "settings.txt", System.Text.Encoding.Default);
- string[] SplittedContents = Contents.Split('\n');
- resolution = SplittedContents[1];
- graphic = SplittedContents[2];
- sound = SplittedContents[3];
- language = SplittedContents[4];
- map = SplittedContents[7];
- Settings();
- }
- IEnumerator DisplayScene() {
- yield return new WaitForSeconds(timer);
- Application.LoadLevel(levelToLoad);
- }
- public void Settings(){
- //Resolution
- if (resolution == "800 x 600"){
- Screen.SetResolution(800, 600, true);
- }
- if (resolution == "1920 x 1080"){
- Screen.SetResolution(1920, 1080, true);
- }
- }
- }
Edit:
Wenn ich print(resolution) verwende kommt jedoch 1920 x 1080 raus. Ich habe es auch mit Zahlen wie 1 versucht, aber es geht trotzdem nicht.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tixewi“ ()
-
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
Funktioniert einwandfrei
---
für die Resolution hat mir jemand in einem Unity Forum diese funktionierende Lösung geposted:
Das Problem ich kann das nicht auf die Map oder das Quality Level übertragen. -
Dieser Jemand hat das gut gelöst. So kann man nämlich auch andere Größen angeben.
Du solltest in Deiner Ini die Breite und Höhe getrennt speichern.
Dann kannst Du sie nämlich so auslesen:
Dazu gäbe es noch folgendes zu sagen:
Convert.ToInt23() ist eine passable Methode.
Das ? zwischen den [] soll den Index darstellen, an dem der entsprechende Wert liegt.
Das englische Wort für "Breite" ist "width". "wide" bedeutet "breit"."Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
Also liefert Convert.ToInt32 und int.Parse das gleiche Ergebnis oder wie?
Edit:
Bei Convert.ToInt32 kommt: ...: error CS0103: The name `Convert' does not exist in the current context
Edit: Edit:
Ah ok, habs mal eben gegoogled und da wurde geschrieben, dass es eig nur ein Performance unterschied ist, da das eine schneller als das andere ist. -
Jup, liefert das gleiche.
Aber wenn hier steht, dass die Convert Klasse nicht verfügbar ist, dann ist blöd (Du kannst mal probieren, ob es mit System.Convert.ToInt32() funktioniert, aber ich denke nicht, dass das einen Unterschied macht)."Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
-
Benutzer online 1
1 Besucher
-
Ähnliche Themen
-
6 Benutzer haben hier geschrieben
- Gast (27)
- Niko Ortner (12)
- nikeee13 (3)
- Rinecamo (2)
- RodFromGermany (1)
- Myrax (1)