Мне нужно чтобы у меня читало 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);
}
}
}