|
12.09.2010, 19:20
|
#1
|
Unity/C# кодер
Регистрация: 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); }
Всем удачи
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
12.09.2010, 19:29
|
#2
|
Разработчик
Регистрация: 06.08.2007
Сообщений: 473
Написано 131 полезных сообщений (для 257 пользователей)
|
Ответ: Простое сохранение и чтение ini файлов
пасиб, но мне многое непонятно например запись
Dictionary<string, string> data
чтоза ключ значения словари и тп
|
(Offline)
|
|
12.09.2010, 19:47
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Простое сохранение и чтение ini файлов
запись Dictionary<string, string> объявляет класс по шаблону, где первый string - это тип ключа, а второй - значения. К сожалению как такое описать на JS не знаю, но есть альтернатива - Hashtable.
Вот тут написали свой класс словаря с сохранением и чтением, так что для JS можете его использовать
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
12.09.2010, 19:54
|
#4
|
Разработчик
Регистрация: 06.08.2007
Сообщений: 473
Написано 131 полезных сообщений (для 257 пользователей)
|
Ответ: Простое сохранение и чтение ini файлов
тоесть первый стринг для названия переменной втой стинг для её значения?
|
(Offline)
|
|
12.09.2010, 19:57
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Простое сохранение и чтение ini файлов
Сообщение от Illidan
тоесть первый стринг для названия переменной втой стинг для её значения?
|
Да именно так. Это тип ключа и значения в словаре. Т.е. ключь может быть строковым и значение строковым. Во многих случаях при программировании такие словари часто используются для хранения например GameObject в качестве значения. Применение можно придумать разное
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.08.2012, 00:17
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Простое сохранение и чтение ini файлов
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:50.
|