188 lines
6.0 KiB
C#
188 lines
6.0 KiB
C#
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// @module Quick Save for Unity3D
|
|
// @author Michael Clayton
|
|
// @support clayton.inds+support@gmail.com
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using CI.QuickSave.Core.Storage;
|
|
|
|
namespace CI.QuickSave
|
|
{
|
|
public class QuickSaveCsv
|
|
{
|
|
/// <summary>
|
|
/// Returns the number of rows in the csv file
|
|
/// </summary>
|
|
public int RowCount => _values.Count;
|
|
|
|
private readonly List<List<string>> _values;
|
|
|
|
private QuickSaveCsv(List<List<string>> items)
|
|
{
|
|
_values = items;
|
|
}
|
|
|
|
public QuickSaveCsv()
|
|
{
|
|
_values = new List<List<string>>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads a csv file from the specified path
|
|
/// </summary>
|
|
/// <param name="path">The path to the file</param>
|
|
/// <returns>A QuickSaveCsv object that represents the loaded csv file</returns>
|
|
/// <exception cref="QuickSaveException"></exception>
|
|
public static QuickSaveCsv Load(string path)
|
|
{
|
|
var lines = FileAccess.LoadLines(path);
|
|
|
|
if (lines == null)
|
|
{
|
|
throw new QuickSaveException("File does not exist");
|
|
}
|
|
|
|
List<List<string>> values = new List<List<string>>();
|
|
|
|
try
|
|
{
|
|
foreach (var line in lines)
|
|
{
|
|
values.Add(new List<string>());
|
|
|
|
var cells = line.Split(',');
|
|
|
|
foreach (var cell in cells)
|
|
{
|
|
values.Last().Add(cell);
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw new QuickSaveException("Failed to load file");
|
|
}
|
|
|
|
return new QuickSaveCsv(values);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Saves the QuickSaveCsv to a csv file
|
|
/// </summary>
|
|
/// <param name="path">The path to the file</param>
|
|
/// <exception cref="QuickSaveException"></exception>
|
|
public void Save(string path)
|
|
{
|
|
var lines = _values.Select(x => string.Join(",", x)).ToList();
|
|
|
|
if (!FileAccess.SaveLines(path, lines))
|
|
{
|
|
throw new QuickSaveException("Failed to save file");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the count of the cells in the specified row
|
|
/// </summary>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
/// <returns>Count of the cells in the row</returns>
|
|
/// <exception cref="QuickSaveException"></exception>
|
|
public int GetCellCount(int row)
|
|
{
|
|
if (_values.Count <= row)
|
|
{
|
|
throw new QuickSaveException("The specified row does not exist");
|
|
}
|
|
|
|
return _values[row].Count;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets value of the specified cell
|
|
/// </summary>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
/// <param name="column">The zero based index of the column</param>
|
|
/// <returns>The value of the cell</returns>
|
|
/// <exception cref="QuickSaveException"></exception>
|
|
public string GetCell(int row, int column)
|
|
{
|
|
if (_values.Count <= row || _values[row].Count <= column)
|
|
{
|
|
throw new QuickSaveException("The specified cell does not exist");
|
|
}
|
|
|
|
return _values[row][column];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the value of the specified cell
|
|
/// </summary>
|
|
/// <typeparam name="T">The type to return the value as</typeparam>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
/// <param name="column">The zero based index of the column</param>
|
|
/// <returns>The value of the cell</returns>
|
|
/// <exception cref="QuickSaveException"></exception>
|
|
public T GetCell<T>(int row, int column)
|
|
{
|
|
if (_values.Count <= row || _values[row].Count <= column)
|
|
{
|
|
throw new QuickSaveException("The specified cell does not exist");
|
|
}
|
|
|
|
return (T)Convert.ChangeType(_values[row][column], typeof(T));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets the value of the specified cell
|
|
/// </summary>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
/// <param name="column">The zero based index of the column</param>
|
|
/// <param name="value">The value to set</param>
|
|
public void SetCell(int row, int column, string value)
|
|
{
|
|
if (_values.Count <= row)
|
|
{
|
|
while (_values.Count <= row)
|
|
{
|
|
_values.Add(new List<string>());
|
|
}
|
|
}
|
|
|
|
if (_values[row].Count <= column)
|
|
{
|
|
while (_values[row].Count <= column)
|
|
{
|
|
_values[row].Add(string.Empty);
|
|
}
|
|
}
|
|
|
|
_values[row][column] = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets the value of the specified cell
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of the value</typeparam>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
/// <param name="column">The zero based index of the column</param>
|
|
/// <param name="value">The value to set</param>
|
|
public void SetCell<T>(int row, int column, T value) => SetCell(row, column, Convert.ToString(value));
|
|
|
|
/// <summary>
|
|
/// Deletes the specified row
|
|
/// </summary>
|
|
/// <param name="row">The zero based index of the row</param>
|
|
public void DeleteRow(int row)
|
|
{
|
|
if (_values.Count > row)
|
|
{
|
|
_values.RemoveAt(row);
|
|
}
|
|
}
|
|
}
|
|
} |