首页 > 解决方案 > 关于文件读取和比较的问题

问题描述

首先我有一个看起来像这样的文件:

//Manager Ids

ManagerName: FirstName_LastName
ManagerLoginId: 12345

还有一个输入了五位代码(例如 12345)的文本框。当按下 Enter 键时,它被分配给一个名为:“EnteredEmployeeId”的字符串,然后我需要在上面的整个文件中搜索“EnteredEmployeeId”,如果它匹配,那么它将打开另一个页面,如果它没有找到该号码然后显示一条消息(告诉您没有找到员工 ID)。

所以基本上我试图打开一个文件搜索整个文档的 Id 然后返回 true 或 false 以允许它也显示错误或打开一个新页面,并将 EnteredEmployeeId 重置为空。

到目前为止我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Rent_a_Car
{
    public partial class Employee_Login_Page : Form
    {
        public Employee_Login_Page()
        {
            InitializeComponent();
        }
        string ManagersPath = @"C:\Users\Name\Visual Studios Project Custom Files\Rent A Car Employee Id's\Managers\Manager_Ids.txt"; //Path To Manager Logins
        string EnteredEmployeeId;


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Employee_Id_TextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&           //Checks Characters entered are Numbers Only and allows them
                (e.KeyChar != '0'))
            {
                e.Handled = true;
            }
            else if (e.KeyChar == (char)13)                                         //Checks if The "Enter" Key is pressed
            {
                EnteredEmployeeId = Employee_Id_TextBox.Text;                         //Assigns EnteredEmployeeId To the Entered Numbes In Text Box          

                bool result = ***IsNumberInFile***(EnteredEmployeeId, "ManagerLoginId:", ManagersPath);
                if (result)
                {
                             //open new window
                }
                else
                {
                    MessageBox.Show("User Not Found");
                }
            }
        }
    }
}

标签: c#.netvisual-studiowinforms

解决方案


此函数将读取整个文件并查找是否有插入的代码。它将与字符串一起使用(因为它是您的文本框的输出)并且将仅返回真或假(员工是否在文件中)而不是他的姓名、姓氏等。

static bool IsNumberInFile(string numberAsString, string LineName, string FileName)
    {
        var lines = File.ReadAllLines(FileName);

        foreach(var line in lines)
        {
            var trimmedLine = line.Replace(" ", ""); //To remove all spaces in file. Not expecting any spaces in the middle of number
            if (!string.IsNullOrEmpty(trimmedLine) && trimmedLine.Split(':')[0].Equals(LineName) && trimmedLine.Split(':')[1].Equals(numberAsString))
                return true;

        }
        return false;
    } 

//使用示例

    String ManagersPath = @"C:\Users\Name\Visual Studios Project Custom Files\Employee Id's\Managers\Manager_Ids.txt"; //Path To Manager Logins

String EnteredEmployeeId;

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void Employee_Id_TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&           //Checks Characters entered are Numbers Only and allows them
        (e.KeyChar != '0'))
            {
                e.Handled = true;
            }
    else if (e.KeyChar == (char)13)                                         //Checks if The "Enter" Key is pressed
    {
        EnteredEmployeeId = Employee_Id_TextBox.Text;                         //Assigns EnteredEmployeeId To the Entered Numbes In Text Box           


        bool result = IsNumberInFile(EnteredEmployeeId, "ManagerLoginId" , ManagersPath) 
        if(result)
           //User is in file
        else
          //User is not in file
    }
}

}


推荐阅读