C # словарь Unity использовать ключ, чтобы открыть файл .csv - PullRequest
0 голосов
/ 25 января 2019

РЕШЕНИЕ: Используйте функцию .Trim () C # для удаления пробелов в функции dictionary.key или .value!

Я использую Unity и программирую на C #.

Проблема в том, что я хочу использовать строковый ключ словаря, чтобы открыть CSV-файл с тем же именем (см. Код).Проблема в том, что это не работает.C # / Unity получают правильный ключ, как строку с правильным текстом и всем, однако он не может найти файл.

Например: если я просто наберу "start / Germany" или использую переменную с таким именемоно работает.Если я использую «start /» + var.Key, это не так, хотя он точно отображается как «start / Germany».

РЕДАКТИРОВАТЬ: Еще раз уточнить: Unity не может найти файл, когда я использую("start /" + country.Key), но это происходит при использовании "start / France" или любой другой страны.В журнале он отображается как точно такая же «строка» / путь.Когда я удаляю исключение try, оно выдает: NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта

Я проверил много разных комбинаций операторов if, но ничего не дает оператор TRUE ...

if(("start/" + country.Key) == ("start/France"))
if(("start/" + country.Key).Equals("start/France"))
if(("start/France").Equals("start/" + country.Key))

....

Однако кажется, что строка в качестве ключа в словаре используется как обычная строка в тексте, но сравнение этой строки с обычной строкой всегда ложно.Строки в словаре одинаковы!

 public class LoadData : MonoBehaviour
    {
        public static void Load(string filename)
        {
            TextAsset dataFile = Resources.Load<TextAsset>("Data/" + filename);
            string[] data = dataFile.text.Split(new char[] { '\n' });

            string[] columnHeader = data[0].Split(new char[] { ';' });

            Debug.Log("Load <" + filename + ">");
            //Debug.Log("The source file has " + data.Length + " rows");

            for (int i = 1; i < data.Length - 1; i++)
            {
                string[] row = data[i].Split(new char[] { ';' });

                // Skip the row if the first cell of a row is empty
                if (row[0] != "")
                {
                    if (filename.Contains("start"))
                    {
                        LoadStartVariables(row);
                    }
                    else if (filename.Equals("countries"))
                    {
                        LoadCountries(row);
                    }
                    else if (filename.Equals("global"))
                    {
                        LoadGlobalVariables(row, columnHeader);
                    }
                }
            }
        }

        private static void LoadStartVariables(string[] row)
        {
            Debug.Log(row[0] + " = " + row[1]);
        }

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

public class InstantiateNewGame
{
    public static void StartNewGame()
    {
        LoadData.Load("countries");
        InstantiateCountries();
        LoadData.Load("start/France");
        LoadData.Load("start/Germany");
        LoadData.Load("global");
    }

    private static void InstantiateCountries()
    {
        foreach (KeyValuePair<string, Country> country in Global.countries)
        {
            //LoadData.Load("start/" + country.Key.ToString());
            try
            {
                LoadData.Load("start/" + country.Key);
            }
            catch
            {
                Debug.Log(country.Key + ": No File!");
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...