[Пример] RClass 1.01

SkoTi

Содержание:
  • Func: Набор стандартных функций.
  • LocalBase: Работа с локальными базами(XML файлами)
  • Messages: Получение текста по командам
  • Accounts: Работа с аккаунтами по системе "RClass PHP Server"(НЕ ЗАВЕРШЕННЫЙ КЛАСС Accounts)
FAQ по пользованию
Func: Load() - Служит для предварительной проверки и создания необходимых файлов и папок. RemoveSpaces(string text) - Удаление пробелов из текста. Метод возвращает принятый 'text' без пробелов.LocalBase: Read(string file, string patch) - Чтение из XML. Read("./file.xml", "App/me/go") - запрашивает из файла file.xml в корневой директории параметр который хранится в
<App>
     <me>
           <go>
           </go>
     </me>
</App>
В случае отсутствия значения - возвращается FALSE как string а не как boolWrite(string file, string patch, string value) - Запись в XML файл. Write("./file.xml", "App/me", "Бла бла бла") - Записывает в файл file.xml в
<App>
     <me>
           Бла бла бла
     </me>
</App>
В случае если файл не найден то будет содан файл с корневым тегом который был указан перед первым слешем. А при записи в файл - В случае отсуствия указанного пути будет создан тег 'me' в корневом теге 'App'(Теги примерны и зависит от того что вы укажите.). Внимание! Если указать длиннее путь до тега не существующего то в любом случае будет записано в корневую директорию последний тег указанный в пути. То есть при записи в "App/me/go/frend" будет запись только в
<App>
     <frend>
     </frend>
</App>
Messages: GetText(string kods) - Берёт с помощью LocalBase текст по адресу "./Data/Langue/Default.dat" который хранится в теге в параметре kods. В случае отсутствия создаётся файл с тегом error который работает на все случае жизни так, как при отсутствии кода берётся error Пример строения "./Data/Langue/Default.dat"
<Langue>
     <ok>Вы успешно зарегестрированы.</ok>
     <error>Неизвестная ошибка</error>
</Langue>
ps. В будущем буду улучшать класс и выкладывать в новых темах более продвинутые версии, вместо критики в данной теме отвечаю на вопросы или принимаю предложения по оптимизации.
8 ответов

SkoTi

Примеры
LocalBase: Запись:
LocalBase.Write("./Data/Langue/Default.dat", "Langue/error", "Неизвестная ошибка.");
Чтение:
text = LocalBase.Read("./Data/Langue/Default.dat", "Langue/error");


SkoTi

Класс действительно супер))


SkoTi

Для чего вообще классы эти, я что-то не врубаюсь, в чём фишка возможности записи и чтения каких-то xml?По коду:
        public static string Read(string file, string patch)
        {
            XmlDocument xml = new XmlDocument();
            string result = null;
            xml.Load(file);
            try
            {
                XmlNode comment = xml.SelectSingleNode("//" + patch);
                result = comment.InnerText;
            }
            catch
            {
                result = "FALSE";
            }
            if (result == null) result = "FALSE";
                return result;
        }
Зачем возвращать текстом "FALSE"? Чем так плох bool? И, вроде бы, условие никогда не будет тру. Да и try catch там вообще не нужен.


SkoTi

    public class Messages
    {
        public static string GetText(string kods)
        {
            kods = Func.RemoveSpaces(kods);
            if (!File.Exists("./Data/Langue/Default.dat"))
                LocalBase.Write("./Data/Langue/Default.dat", "Langue/error", "Неизвестная ошибка.");
            string text = LocalBase.Read("./Data/Langue/Default.dat", "Langue/" + kods);
            if (text == null || text == "FALSE")
                text = LocalBase.Read("./Data/Langue/Default.dat", "error");
            return text;
        }
    }
То есть ты возвращаешь текст FALSE, чтобы потом его сравнивать со строкой FALSE или null? Так null никогда не будет строка будет FALSE или результат чтения. Бред полнейший, короче. Вообще не понимаю, откуда вы берёте эту "фишку" возвращать результат какой-либо работы в виде строки, типа: "ок", "error" и подобное. Перечисления, тип bool для кого придумали? Так ещё и спорят некоторые, это уже диагноз.
        public static string RemoveSpaces(string text)
        {
            text = text.Replace("  ", string.Empty);
            text = text.Trim().Replace(" ", string.Empty);
 
            return text;
        }
А тут в чём фишка? Сначала удалить двойные пробелы, потом обрезать пробелы по краям и потом заменить пробелы?
        public static void Load()
        {
            if (!Directory.Exists("Data")) Directory.CreateDirectory("Data");
            if (!Directory.Exists("./Data/Langue")) Directory.CreateDirectory("./Data/Langue");
        }
"Гениально". Я так понимаю проверка ведётся в текущем рабочем каталоге, измени его и твой код перестанет работать так, как задумано.


SkoTi

Casper-SC, Всё так и должно быть! По поводу FALSE это просто удобная вещь так как я возвращаю в многих случаях String и мне нужно текст вернуть... Поэтому и пришла в голову делать остановку метода ретюреном фалса))) Потом он переводится в error или в ещё какой либо код.... По поводу ok или error и т д.. Это краткие коды текста какова либо Он же вызывается из файла, Тоесть есть код ok-auth значет при обращении к классу вернётся текст - Авторизация успешно завершена... И т д...


SkoTi

Тоесть есть код ok-auth значет при обращении к классу вернётся текст - Авторизация успешно завершена... И т д...
Поверь - это я и без объяснения понимал. Но ты меня абсолютно не убедил. Это неверный подход. Судя по твоему убеждению ты и не хочешь делать верно, а только как сам убеждён. Просил советов, но толку давать советы, если ты их игнорируешь. ok-auth если всего 2 возможных варианта, то меняешь на bool и всё. Если более, то на enum.
По поводу ok или error и т д.. Это краткие коды текста какова либо
Например:
<ComboBox x:Name="logicCombobox" Margin="5,0,5,3">
   <ComboBoxItem Content="Miner" Tag="MinerBehaviour" />
   <ComboBoxItem Content="Digger" Tag="DiggerBehaviour" />                           
</ComboBox>
        public enum LogicMethod
    {
        None,
        MinerBehaviour,
        DiggerBehaviour,
    }
        private LogicMethod GetLogicFromComboBox()
        {
            LogicMethod logic; 
            string name = (string)((ComboBoxItem)logicCombobox.Items[logicCombobox.SelectedIndex]).Tag;
            if (!Enum.TryParse(name, out logic))
            {
                MessageBox.Show(string.Format("Не удалось получить значение {0} из перечисления {1}",
                    name, typeof(LogicMethod).FullName));
            }
            return logic;
        }
Вот так же ты можешь прочитать из файла текстовое значение перечисления и конвертировать его обратно в enum, в чём проблема?на крайняк есди нужно вернуть несколько значений, то делаешь либо свой класс с этими значениями, или используешь Tuple либо ref/out в параметрах метода, чтобы передавать в метод ссылку по ссылке и иметь возможность присвоить этой ссылке новый объект внутри метода и после выхода из метода его не потерять.
Casper-SC, Всё так и должно быть!
Так в чём смысл 2 раза замену делать? Я вот не понимаю.
public static string RemoveSpaces(string text)
        {
            text = text.Replace("  ", string.Empty);
            text = text.Trim().Replace(" ", string.Empty);
 
            return text;
        }
Ну вот я проверил, толку от твой двойной замены вообще ноль
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string testText = "  Привет Привет  Привет    Привет   Привет          Привет! ";
            Console.WriteLine(testText);
            Console.WriteLine("Производим замену пробелов");
            testText = RemoveSpaces(testText);
            Console.WriteLine(testText);
            Console.ReadKey();
        }
 
        public static string RemoveSpaces(string text)
        {
            //text = text.Replace("  ", string.Empty);
            text = text.Trim().Replace(" ", string.Empty);
 
            return text;
        }
    }
}


SkoTi

У меня была проблема где одиночная замена не справлялась... Поэтому добавил двойную


SkoTi

Главное это то что класс рабочий! И он в помощь для новичков...