forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Уроки (http://forum.boolean.name/forumdisplay.php?f=145)
-   -   Простое сохранение и чтение ini файлов (http://forum.boolean.name/showthread.php?t=13327)

pax 12.09.2010 19:20

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

Ini.cs
PHP код:

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 файлы содержат разделы, и конечно этого я не предусмотрел, но можно вполне пользоваться.

Пример использования:
PHP код:

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);


Всем удачи :)

Illidan 12.09.2010 19:29

Ответ: Простое сохранение и чтение ini файлов
 
пасиб, но мне многое непонятно например запись
Dictionary<string, string> data
чтоза ключ значения словари и тп

pax 12.09.2010 19:47

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

Вот тут написали свой класс словаря с сохранением и чтением, так что для JS можете его использовать ;)

Illidan 12.09.2010 19:54

Ответ: Простое сохранение и чтение ini файлов
 
тоесть первый стринг для названия переменной втой стинг для её значения?

pax 12.09.2010 19:57

Ответ: Простое сохранение и чтение ini файлов
 
Цитата:

Сообщение от Illidan (Сообщение 161796)
тоесть первый стринг для названия переменной втой стинг для её значения?

Да именно так. Это тип ключа и значения в словаре. Т.е. ключь может быть строковым и значение строковым. Во многих случаях при программировании такие словари часто используются для хранения например GameObject в качестве значения. Применение можно придумать разное ;)

pax 06.08.2012 00:17

Ответ: Простое сохранение и чтение ini файлов
 
Как это использовать через PlayerPrefs


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot