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

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

Вернуться   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 fileNameDictionary<stringstringdata)
    {
        
// используем построитель строк для получения полного текста файла
        
StringBuilder sb = new StringBuilder();

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

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

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

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

        
// получаем полный путь к файлу
        
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(0pos).Trim();
                
string value "";
                if ((
pos 1) < dataString.Length)
                {
                    
value dataString.Substring(pos 1dataString.Length pos 1).Trim();
                }
                
// сохраняем данные в коллекцию
                
data.Add(keyvalue);
            }

        }
        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,stringdataToSave = new Dictionary<stringstring>();
dataToSave.Add("test""testValue");
dataToSave.Add("int"123.ToString());
dataToSave.Add("float"123.5f.ToString());
Ini.Save("data.ini"dataToSave);

Dictionary<stringstringloadedData Ini.Load("data.ini");

foreach (
KeyValuePair<stringstringkeyValuePair 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, время: 09:43.


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