Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Уроки

Ответ
 
Опции темы
Старый 12.09.2010, 19:20   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Простое сохранение и чтение ini файлов

Итак по просьбам трудящихся чтение и запись ini файлов.

Ini.cs
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;

public class 
Ini
{
    
/// <summary>
    /// Функция сохраняет данные в ini файл
    /// </summary>
    /// <param name="fileName">имя файла в директории Data приложения (в редакторе используется папка Assets)</param>
    /// <param name="data">данные в виде словаря</param>
    
public static void Save(string fileName, Dictionary<string, string> data)
    {
        
// используем построитель строк для получения полного текста файла
        
StringBuilder sb = new StringBuilder();

        
// для каждой пары ключ-значение добавляем строку
        
foreach (KeyValuePair<string, string> keyValuePair in data)
        {
            
sb.AppendLine(keyValuePair.Key + "=" + keyValuePair.Value);
        }

        
// получаем полный путь
        
string path = GetFullPath(fileName);

        
// сохраняем
        
File.WriteAllText(path, sb.ToString());
    }

    
/// <summary>
    /// Функция читает данные из ini файла
    /// </summary>
    /// <param name="fileName">имя файла в директории Data приложения (в редакторе используется папка Assets)</param>
    /// <returns></returns>
    
public static Dictionary<string, string> Load(string fileName)
    {
        
// создаем словарь
        
Dictionary<string, string> data = new Dictionary<string, string>();

        
// получаем полный путь к файлу
        
string path = GetFullPath(fileName);

        
// читаем файл в массив строк
        
string[] lines = File.ReadAllLines(path);

        
// выполняем получение данных из кадой строки
        
foreach (string line in lines)
        {
            
string dataString = line.Trim();

            
// пустые строки пропускаем
            
if (string.IsNullOrEmpty(dataString)) continue;

            
// пропускаем комментарии
            
if (dataString.StartsWith(";")) continue;

            
// так же пропускаем строки, не содержащие равно
            
if (dataString.Contains("="))
            {
                
// находим позицию первого равно
                
int pos = dataString.IndexOf("=");

                
// получаем данные
                
string key = dataString.Substring(0, pos).Trim();
                
string value = "";
                if ((
pos + 1) < dataString.Length)
                {
                    
value = dataString.Substring(pos + 1, dataString.Length - pos - 1).Trim();
                }
                
// сохраняем данные в коллекцию
                
data.Add(key, value);
            }

        }
        return 
data;
    }

    
/// <summary>
    /// Функция получаения полного пути в папке Data приложения (Assets в режиме редактора)
    /// </summary>
    /// <param name="localPath">Относительный путь к файлу</param>
    /// <returns>Полный путь</returns>
    
public static string GetFullPath(string localPath)
    {
        
string basePath = Application.dataPath.Trim();
        if (!(
basePath.EndsWith("/") || basePath.EndsWith("\\")))
        {
            
basePath += "/";
        }

        
localPath = localPath.Trim();
        if (
localPath.StartsWith("/") || localPath.StartsWith("\\"))
        {
            
localPath = localPath.Substring(1);
        }

        return 
basePath + localPath;
    }
} 
Конечно настоящие ini файлы содержат разделы, и конечно этого я не предусмотрел, но можно вполне пользоваться.

Пример использования:
Dictionary<string,string> dataToSave = new Dictionary<string, string>();
dataToSave.Add("test", "testValue");
dataToSave.Add("int", 123.ToString());
dataToSave.Add("float", 123.5f.ToString());
Ini.Save("data.ini", dataToSave);

Dictionary<string, string> loadedData = Ini.Load("data.ini");

foreach (
KeyValuePair<string, string> keyValuePair in loadedData)
{
     
Debug.Log(keyValuePair.Key + "=" + keyValuePair.Value);
} 
Всем удачи
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
FREE MAN (06.08.2012), h1dd3n (13.09.2010), Harter (21.02.2012), Illidan (12.09.2010), Nex (13.09.2010), Nuprahtor (12.09.2010), Shiko1st (10.04.2011)
Старый 12.09.2010, 19:29   #2
Illidan
Разработчик
 
Регистрация: 06.08.2007
Сообщений: 473
Написано 131 полезных сообщений
(для 257 пользователей)
Ответ: Простое сохранение и чтение ini файлов

пасиб, но мне многое непонятно например запись
Dictionary<string, string> data
чтоза ключ значения словари и тп
(Offline)
 
Ответить с цитированием
Старый 12.09.2010, 19:47   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Простое сохранение и чтение ini файлов

запись Dictionary<string, string> объявляет класс по шаблону, где первый string - это тип ключа, а второй - значения. К сожалению как такое описать на JS не знаю, но есть альтернатива - Hashtable.

Вот тут написали свой класс словаря с сохранением и чтением, так что для JS можете его использовать
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Illidan (12.09.2010), Nuprahtor (12.09.2010)
Старый 12.09.2010, 19:54   #4
Illidan
Разработчик
 
Регистрация: 06.08.2007
Сообщений: 473
Написано 131 полезных сообщений
(для 257 пользователей)
Ответ: Простое сохранение и чтение ini файлов

тоесть первый стринг для названия переменной втой стинг для её значения?
(Offline)
 
Ответить с цитированием
Старый 12.09.2010, 19:57   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Простое сохранение и чтение ini файлов

Сообщение от Illidan Посмотреть сообщение
тоесть первый стринг для названия переменной втой стинг для её значения?
Да именно так. Это тип ключа и значения в словаре. Т.е. ключь может быть строковым и значение строковым. Во многих случаях при программировании такие словари часто используются для хранения например GameObject в качестве значения. Применение можно придумать разное
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Illidan (12.09.2010)
Старый 06.08.2012, 00:17   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Простое сохранение и чтение ini файлов

Как это использовать через PlayerPrefs
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (06.08.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:36.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com