Jump to content
Unity Insider Forum

Daten aus txt-Datei in ein Skript als Array schreiben


Unity54

Recommended Posts

In einem Wörterspielprogramm gibt es 3 verschiedenen Wörterdateien (nomen,verben,adjektive). Diese sind relativ umfangreich, so 300-400 Wörter pro Datei.

Für’s erste habe ich die Wörter Dateien als Arrays direkt in die Klasse geschrieben. Das Programm funktioniert so auch. 

Ich meine aber, dass alle 1200 Wörter somit geladen werden. Ich möchte jedoch die einzelnen Wort Dateien per Script aus den Assets (z.B. als nomen.txt) laden.

Wäre das der richtige Weg, und wie könnte dies bewerkstellig werden?

Wie müsste die txt Datei geschrieben, respektive geladen werden?

 

 

public class textcontrol : MonoBehaviour
{
public int zNomen;
 
string [] nomen = new string [] {"BAUER","HÜTTE","KIND","MANN","FRAU","ZAUBERER","FEE","TRAUM","APFEL","GIRAFFE","MAUS","TIGER","MUTTER",
"VATER","SOHN","KOPF","HAUS","MAUS","BLEISTIFT","TINTE","AUTO","SCHWESTER","BILD","ZEICHNUNG","GLAS","LÖFFEL","MESSER","GABEL","TEE","DACH",
"SONNE","STERN","WOLKE","GEBIRGE","EI","TUNNEL","BUTTER","TANNE","PULT","BUCH","HEFT","HAND","BEIN","BAUM","TRAUM","MOND","KOPF","KNOPF",
"WURM","KAMEL","TURM","SCHUH","HUT","BETT"};
 

Wortliste1.txt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gibt es viele Möglichkeiten. Hier eine fertige Klasse die du dafür verwenden kannst:
https://wiki.unity3d.com/index.php/CSVReader

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class ReadCSV : MonoBehaviour {
 
	public TextAsset csv; 
 
	void Start () {
		string[,] output2D = CSVReader.SplitCsvGrid(csv.text);         
	}
}

Wenn dir das 2D-Array nicht gefällt kann man es noch in ein 1dim-Array umwandeln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab mir mal die Mühe gemacht das Ergebnis des CSVReader in ein 1dim-Array zu übertragen.
Deine Eingabedatei als "Wortliste.txt" in den Assets abspeichern und dann in den Slot "csv" des unteren Skriptes ziehen.
Die Eingabedatei sollte dann so aussehen:

"BAUER","H†TTE","KIND","MANN","FRAU","ZAUBERER","FEE","TRAUM","APFEL","GIRAFFE","MAUS","TIGER","MUTTER"

Die CSV-Reader-Klasse muss auch existieren, meine Klasse verwendet diese!

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ReadCSV : MonoBehaviour
{

    public TextAsset csv;

    void Start()
    {
        string[,] output2D = CSVReader.SplitCsvGrid(csv.text);
        string[] output1D = Output1D(output2D);
        foreach (string s in output1D)
        {
            Debug.Log(s);
        }
    }

    // Converts 2 dimensional string array to only 1 dimension
    static private string[] Output1D(string[,] grid)
    {
        // creates 1D string array
        string[] outputGrid = new string[grid.GetUpperBound(0) * grid.GetUpperBound(1)];
        for (int y = 0; y < grid.GetUpperBound(1); y++)
        {
            for (int x = 0; x < grid.GetUpperBound(0); x++)
            {
                outputGrid[x+ (y * grid.GetUpperBound(0))] = grid[x, y];
            }
        }
        return outputGrid;
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vorerst mal herzlichen Dank für die schnelle Hilfe.

Es klappt leider noch nicht so recht, liegt aber an meinem Status (blutiger Unity-Anfänger) sorry!

Ich habe die Wortliste.txt in den Assets abgespeichert.

Eine Klasse namens 

ReadCSV erstellt und den Code kopiert und eingefügt.

Nun wohin mit diesem Script? in den Skrips-Ordner oder in die Assets???

..und dann in den Slot "csv" des unteren Skriptes ziehen ( dies habe ich nicht verstanden, wünsche eine genauere Erklärung.

Ich bekomme im Moment die Fehlermeldung

Assets/ReadCSV.cs(12,30): error CS0103: The name 'CSVReader' does not exist in the current context

hängt vermutlich mit Slot zusammen?

Noch unklar ist auch , wie das Array erstellt werden soll?

string [] nomen = new string []
Wäre sehr dankbar für eine Finischlösung meines Problems
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok der Reihe nach:
1) Das Skript in den script order unter deinen Assets
2) Der Fehler "Assets/ReadCSV.cs(12,30): error CS0103: The name 'CSVReader' does not exist in the current context" bedeutet, dass Unity die Klasse "CSVReader" noch nicht gefunden hat, also irgendwas stimmt also damit nicht, entweder falsch benannt oder falsch abgelegt.

Ich hänge hier die Klasse CSVReader (und die beiden anderen Dateien) noch einmal als Anhang dran, dann musst du nur diese Dateien einfach in deinen Script-Ordner kopieren.
Lösch am besten vorher die anderen CSV-Klassen und Eingabedateien weg.
 

CSVReader.cs ReadCSV.cs Wortliste.txt

 

Wenn die 3 Dateien dann in deinem Script-Folder sind, dann das Script ReadCSV auf ein GameObject in deiner Unityscene ziehen und die Datei "Wortliste" dann in den Slot dieses Skriptes.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist das nötig, da direkt CSV drauf zu schmeißen?

Wenn man die Wörter einfach in eine Liste packt, eins pro Zeile:

AUTO
WURST
NASE

und das in eine .txt-Datei speichert, dann ist das Auslesen hiermit getan:

public TextAsset file;
private string[] words;

private void Start()
{
  words = file.text.Split('\n');
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...