RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1146589
Accepted
KarenMiles29
KarenMiles29
Asked:2020-06-28 20:13:00 +0000 UTC2020-06-28 20:13:00 +0000 UTC 2020-06-28 20:13:00 +0000 UTC

在 Windows 窗体中搜索 .txt 文件

  • 772

有必要在 Windows 窗体中使用 C++/CLI 中的 txt 文件来组织工作。
该文件由员工姓名、姓名首字母和电话号码组成。

锻炼:

  1. 在 textBox1 中输入文件的名称。
  2. 在 textBox2 中单击按钮显示其内容。
  3. 在 textBox3 中输入员工的姓氏和姓名首字母。
  4. 在按 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

我设法在文本框中显示文件的内容,但我无法实现搜索...用于在文件中显示数据的按钮:

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;//остановка цикла
    }

}

winforms
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alexander Petrov
    2020-06-29T16:14:38Z2020-06-29T16:14:38Z

    以下代码搜索员工,如果找到,则显示电话号码。

    首先,文本使用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。

    • 0

相关问题

  • 如何在单击其元素时更改表单的背景?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5