2025-06-03 15:11:16 +02:00

95 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class Config
{
public const string CONFIGFILE = "CONFIG";
private const char separator = '=';
private const string comment = "!";
private const char connchar = '§';
public string key_prefix { get; set; }
private int _cores = 0;
private bool _singlecore = false;
private string _defaultpath = System.IO.Path.Combine(Environment.CurrentDirectory, CONFIGFILE);
public int Cores => _cores;
public bool Singlecore => _singlecore;
public List<KeyValue> KeyValues { get; private set; }
public string FileConfig { get; set; }
public Config()
{
//_cores = Environment.ProcessorCount;
//if (_cores > 1) _singlecore = false;
if (File.Exists(_defaultpath))
{
FileConfig = _defaultpath;
key_prefix = "";
Read();
}
}
public Config(string fileconfig, string prx = "") : this()
{
if (File.Exists(fileconfig) && fileconfig != _defaultpath)
{
FileConfig = fileconfig;
key_prefix = prx;
Read();
}
}
public void Read()
{
KeyValues = AnalizeConfig(this.FileConfig, this.key_prefix);
}
public List<KeyValue> AnalizeConfig(string configfile, string prefix = "")
{
List<KeyValue> ret = new List<KeyValue>();
if (configfile == null || configfile == string.Empty) return ret;
if (!File.Exists(configfile))
return null;
this.FileConfig = configfile;
this.key_prefix = prefix;
var _content = File.ReadAllLines(configfile);
if (_content.Length > 0)
{
foreach (var element in _content)
{
//devo escludere i commenti e le
//righe vuote
/// se la linea comincia con ||| non leggo piu
string linea = element.Trim();
if (linea.StartsWith("|||"))
break;
else
{
if (linea != string.Empty && !linea.StartsWith(comment))
{
var elements = linea.Split(separator);
string k = string.Empty;
string v = string.Empty;
if (elements.Length > 0)
{
k = elements[0];
}
if (elements.Length > 1)
{
v = elements[1];
}
v = v.Replace(connchar, separator);
ret.Add(new KeyValue(prefix + k, v));
}
}
}
}
return ret;
}
}