Поиск в файле .txt в Windows Forms
Необходимо на С++/CLI в Windows Forms организовать работу с файлом txt.
Файл состоит из фамилий сотрудников, их инициалов и номеров телефонов.
Задание:
- ввести в textBox1 название файла.
- по нажатию кнопки в textBox2 вывести его содержимое.
- в textBox3 ввести фамилию и инициалы сотрудника.
- по нажатию второй кнопки в textBox4 вывести номер телефона
У меня есть готовый рабочий код в консоли, но переписать его в форму никак не выходит.
Вот код для консоли:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "Russian");
ifstream f("file.txt");// открываем файл
if (f.is_open())//если файл существует
{
cout << "Файл существует." << endl;
cout << "Данные из файла:" << endl;
ifstream file("file.txt");
string s;
while (getline(file, s))//пока есть строки
{
cout << s << endl; //выводим строки
}
file.close();//закрываем файл после чтения
while (true)
{
string name;//строка с ФИО
string first, last;//переменная для фамилии и инициалов
string number;//номер телефона
int result = 0;//переменная для остановки цикла
cout << "Введите фамилию и инициалы: ";
getline(cin, name);//ввод ФИО
while (f >> first >> last >> number)//пока есть строки
//разбиваем строку на части: фамилия, инициалы и номер телефона
if (first + ' ' + last == name)//если фамилия и инициалы совпадают с веденным именем
{
cout << "Сотрудник найден. Его номер телефона: " << number << endl << endl;
result = 1;//сотрудник найден
}
if (!result)//если сотрудник не найден
cout << "Сотрудник не найден." << endl << endl;
break;//остановка цикла
}
}
else //если файл не найден
cout << "Файла не существует." << endl;
system("pause");
return 0;
}
Вот содержимое файла:
Ivanov S.E. +123453424234
Petrov A.A. +565654656565
Sidorov I.V. +245646257507
Kalinina E.V. +145672308792
Andreev S.O. +980542178903
Tarasenko V.A. +765421038954
У меня получилось вывести содержимое файла в textBox, а поиск реализовать не могу... Кнопка для вывода данных в файле:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ filename = Convert::ToString(this->textBox1->Text);
if (File::Exists(filename))
{
String^ fileText = File::ReadAllText(filename);
textBox2->Text = fileText;
}
else this->textBox1->Text = "Файла не существует";
}
Кнопка для поиска:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
while (true)
{
String^ name = Convert::ToString(this->textBox3->Text);;//строка с ФИО
String ^first, ^last, ^ number;
int result = 0;//переменная для остановки цикла
//тут уже не знаю, как реализовать поиск
//while (f >> first >> last >> number)//пока есть строки
//разбиваем строку на части: фамилия, инициалы и номер телефона
//if (first + ' ' + last == name)//если фамилия и инициалы совпадают с веденным именем
//{
// this->textBox4->Text = number;
// result = 1;//сотрудник найден
//}
//if (!result)//если сотрудник не найден
// this->textBox4->Text = "Сотрудник не найден.";
break;//остановка цикла
}
}
Ответы (1 шт):
Следующий код осуществляет поиск сотрудника и если он найден, выводит номер телефона.
Сперва текст разбивается на строки с помощью метода String->Split.
В цикле проходим по этим строкам. Каждую из них разбиваем на подстроки по символу '+'.
Далее сравниваем введённое пользователем имя с первым элементом массива. Во втором элементе будет номер телефона.
Если сотрудник найден, то цикл прерываем с помощью return и выходим из метода.
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
String^ name = this->textBox3->Text->Trim();
array<String^> ^ lineSeparator = { Environment::NewLine };
auto lines = this->textBox2->Text->Split(
lineSeparator, StringSplitOptions::RemoveEmptyEntries);
char valueSeparator = '+';
for each (String^ line in lines)
{
auto values = line->Split(valueSeparator);
if (values[0]->Trim() == name) {
this->textBox4->Text = values[1];
return;
}
}
this->textBox4->Text = "Сотрудник не найден";
}
Методом Trim() я убираю лишние пробелы, которые остаются после расщепления строк и которые могут быть введены пользователем. Это упрощает сравнение строк и поиск.
Не давайте переменным названия наподобие textBox1, button2. Дайте им говорящие имена: textBoxFileName, buttonSearch и т. п.