Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2022, 08:29   #1
REZR
Пользователь
 
Регистрация: 05.04.2022
Сообщений: 26
По умолчанию Исправить Чтение.

Мне нужно чтобы у меня читало 1 раз, в строке 31, вроде это проще, мне сказали это сделать, хотя и так все норм.
Помогите пожалуйста. Функция public string getAnswer(string FileNameKey, string qwestion). И string[] massline сделать классом, он там же в той функции.
Код:
ChatBot.cs
 
namespace ChatBotXaml
{
     public class ChatBot
    {
   protected String UserName;//Хранит имя заданное пользователем при первом запуске.
      //при каждом запуске. Загружать имя в эту переменную из файла.
  private String _txtBlock;//Хранит историю сообщений
 public string TxtBlock
        {
            get { return _txtBlock; }
            set { _txtBlock = value; }
        }
        // Задаёт имя пользователя 
        public void SetUsName(string name)
        {
            this.UserName = name;
        }
 // Выход: имя пользователя
        public string GetUsName()
        {
            return this.UserName;
        }
        // читать 1 раз
        // Обрабатывает запрос. Выход: ответ на вопрос
        public string getAnswer(string FileNameKey, string qwestion)
        {
           string str, res="";
            int c;
            bool flag = false;
 qwestion = qwestion.ToLower();
            //
 string[] massline = File.ReadAllLines(FileNameKey, Encoding.GetEncoding(1251));
  for (int f = 0; f < File.ReadAllLines(FileNameKey).Length; f++)
   {
        str = massline[f];
    if (str.Contains(qwestion))
    {
     flag = true;
      for (int i = 0; i < str.Length; i++)
      {
        if (str[i] == '{')
       {
        c = i + 1;
       while (str[c] != '}')
       {
        res += str[c];
        c++;
         }
         }
         }
         }
         }
 
         if (flag)
         {
            return res;
         }
         else
         throw new Exception("Команда не найдена");
        }
 
        // Форматирует текст ответа для textBox
        public string ResponseOutput(string answer)
        {
            string str, timeStr;
            DateTime dt = System.DateTime.Now;
            timeStr = dt.ToString("HH:mm");
            str = timeStr + "\n" + "Bot: " + answer + "\n";
            return str;
        }
 
        // Форматирует текст пользователя для вывода в TextBlock
        public string UserOutput (string text)
        {
            string str, timeStr;
            DateTime dt = System.DateTime.Now;
            timeStr = dt.ToString("HH:mm");
            str = timeStr + "\n" + this.UserName + ": " + text + "\n";
            return str;
        }
 
        // Сохранение данных
        public void SaveData (string FileName)
        {
            using (FileStream File = new FileStream(FileName, FileMode.Create))
            {
                using (StreamWriter FileStream = new StreamWriter(File))
                {
                    FileStream.WriteLine(TxtBlock);
                }
            }
        }
 
        // Считывает и возращает значения файла (для вывода истории при запуске)
        public void getData(string FileName)
        {
            using (StreamReader File = new StreamReader(FileName))
            {
                TxtBlock = File.ReadToEnd();
            }
        }
 
        // Считывает и обрабатывает строку формата:"/умножить 10 на 14"
        public double mult(string str)
        {
            double a, b;
            string[] words = str.Split(' ');
            a = Convert.ToDouble(words[1]);
            b = Convert.ToDouble(words[3]);
            return a * b;
        }
 
        // Открывает .exe файл
        public string OpenExe(string str)
        {
            string[] words = str.Split(' ');
            words[1] += ".exe";
            
            if (File.Exists(words[1]) == false)
            {
                Process.Start(words[1]);
                return "Секундочку";
            } 
            else
            {
                return "Файл не найден";
            }
        }
 
        // Функция обработки вопросов, задаваемых боту.
        public void PressBut(string Question)
        {
            if (Question.Length != 0)//проверка: введено ли что-то в поле
            {
                //сложная команда начанается с "/"
                if (Question[0] == '/')
                {
                    //questionBuff = questionBuff.ToLower();
                    if (Question.Contains("умножить") || Question.Contains("умножь"))
                    {
                        _txtBlock += UserOutput(Question);
                        _txtBlock += ResponseOutput(Convert.ToString(mult(Question)));
                    }
                    else if (Question.Contains("открой"))
                    {
                        _txtBlock += UserOutput(Question);
                        _txtBlock += ResponseOutput(OpenExe(Question));
                    }
                    else if (Question.Contains("сброс"))
                    {
                        _txtBlock = UserOutput(Question);
                        _txtBlock += ResponseOutput("Выполнено");
                    }
                }
                else
                {
                    try //проверка на наличие ответа в файле.
                    {
                        _txtBlock += UserOutput(Question);
                        _txtBlock += ResponseOutput(getAnswer("TestKey.txt", Question));
                    }
                    catch
                    {
                        _txtBlock += UserOutput(Question);
                        _txtBlock += ResponseOutput("Команда не найдена");
                    }
                }
 
            }
        }
 
    }
}
 
MainWindow.xaml
 
namespace ChatBotXaml
{
    public partial class RegistrationWindow : Window
    {
        public RegistrationWindow()
        {
            InitializeComponent();
        }
 
        private void RegButton_Click(object sender, RoutedEventArgs e)
        {
            if (textBoxName.Text.Length > 0)
            {
                MainWindowBot botWin = new MainWindowBot();
                botWin.Bot.SetUsName(textBoxName.Text);
                //botWin.textBlockTape.Text = botWin.Bot.GetUsName();
                botWin.Show();
                this.Close(); 
            } 
            else
            {
                textBoxName.BorderBrush = Brushes.Red;
            }
        }
    }
}
 
Window1.xaml
 
namespace ChatBotXaml
{
    public partial class MainWindowBot : Window
    {
        string FileName = "SaveFile.txt";
        public ChatBot Bot = new ChatBot();//Экземпляр класса, отвечающего за логику бота
 
        public MainWindowBot()
        {
            InitializeComponent();
            Bot.getData(FileName);//Выводим историю
            textBlockTape.Text = Bot.TxtBlock;
        }
 
        // Логика работы кнопки
        private void ButtonEnter_Click(object sender, RoutedEventArgs e)
        {
            Bot.PressBut(TextBoxQuestion.Text);
            textBlockTape.Text = Bot.TxtBlock;
            TextBoxQuestion.Text = "";
        }
 
        // Обработка нажатия клавиши Enter.
        private void TextBoxQuestion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter )
            {
                Bot.PressBut(TextBoxQuestion.Text);
                textBlockTape.Text = Bot.TxtBlock;
                TextBoxQuestion.Text = "";
            }
        }
 
        // сохранение данных при закрытии 
        private void Window_Closed(object sender, EventArgs e)
        {
            Bot.SaveData(FileName);
        }
    }
}
REZR вне форума Ответить с цитированием
Старый 14.06.2022, 22:25   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Код:
class Message
{
  private string[] _lines;

  public string this[int index] => _lines[index];

  public int Length => _lines.Length;

  public Message(string[] lines)
  {
    this._lines = lines;
  }
}
...
 Message massline = new Message(File.ReadAllLines(FileNameKey, Encoding.GetEncoding(1251)));
  for (int f = 0; f < massline.Length; f++)
...
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение xml на php Василий14Великий PHP 1 01.08.2020 13:56
исправить код .Чтение из файла, фильтр данных и запись в новый файл. edikesh Помощь студентам 0 17.12.2011 18:59
чтение из *.dat Klyaksa Общие вопросы по Java, Java SE, Kotlin 6 13.05.2010 03:06
Чтение MDL Gr@nd Общие вопросы Delphi 0 08.06.2009 06:58
Чтение, чтение и еще раз чтение Alex Cones Общие вопросы Delphi 3 07.06.2009 15:28