0

オブジェクトの配列 (myEmployees) に入れる必要があるファイルからデータを読み取っています。この例が終わるまで私のコードは正しいと思いますが、ファイルからデータを読み取り、分割し、それをクラス オブジェクトの配列に正しく配置する方法がわかりません。

//declare an array of employees
Employee[] myEmployees = new Employee[10];

//declare other variables
string inputLine;
string EmpName;
int EmpNum;
double EmpWage;
double EmpHours;
string EmpAdd;

//declare filepath
string environment = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal) + "\\";

//get input
Console.Write("\nEnter a file name in My Documents: ");
string input = Console.ReadLine();
string path = environment + input;
Console.WriteLine("Opening the file...");

//read file
StreamReader myFile = new StreamReader(path);
inputLine = (myFile.ReadLine());

したがって、次のような構造のファイルからデータを読み取っています。

Employee Number
Employee Name
Employee Address
Employee wage Employee Hours

このファイルからデータを読み取り、作成した Employees の配列に解析する必要があります。クラス Employee のクラス データは次のとおりです。

public void Employeeconst ()
{
    employeeNum = 0;
    name = "";
    address = "";
    wage = 0.0;
    hours = 0.0;
}
public void SetEmployeeNum(int a)
{
    employeeNum = a;
}
public void SetName(string a)
{
    name = a;
}
public void SetAddress(string a)
{
    address = a;
}
public void SetWage(double a)
{
    wage = a;
}
public void SetHours(double a)
{
    hours = a;
}
public int GetEmployeeNum()
{
    return employeeNum;
}
public string GetName()
{
    return name;
}
public string GetAddress()
{
    return address;
}
public double GetWage()
{
    return wage;
}
public double GetHours()
{
    return hours;
}
4

2 に答える 2

3

まず、プロパティを使用して Employee クラスを再設計することをお勧めします。これは、より読みやすく、オブジェクト指向プログラミングの原則に従います。

public class Employee
{
    public int EmployeeNum { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public double Wage { get; set; }
    public double Hours { get; set; }

    public void Employee()
    {
        EmployeeNum = 0;
        Name = "";
        Address = "";
        Wage = 0.0;
        Hours = 0.0;
    }
}

また、StreamReader を「using」キーワードでラップすることも検討してください。これにより、ファイルが正しく閉じられるようになります。プログラムの残りの部分は簡単です。ファイルの最後までファイルを 1 行ずつ読み取るだけです。各行を目的のタイプに解析し、値を Employee オブジェクトに設定します。

        using(StreamReader myFile = new StreamReader(path))
        {
            int index = 0;
            while(!myFile.EndOfStream)
            {
                Employee E = new Employee();
                E.EmployeeNum = Int32.Parse(myFile.ReadLine());
                E.Name = myFile.ReadLine();
                E.Address = myFile.ReadLine();
                E.Wage = Double.Parse(myFile.ReadLine());
                E.Hours = Double.Parse(myFile.ReadLine());
                myEmployees[index++] = E;
            }
        }

私のサンプル コードには、eny エラー チェックは含まれていません。

于 2012-04-16T02:44:27.213 に答える
0

行ごとに読むことをお勧めします

MSDN の例を参照してください

http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx

読み取る行ごとに文字列が作成されます。string.Split を使用して、この文字列を配列に分割できます。

string mystring = "50305 FirstName LastName 1234 Anywhere Place 133.25 40";
string[] myarray = mystring.Split(' ');

ただし、ダブルスペースなどの文字列入力を処理することをお勧めします。

重複したスペースを取り除くために、このようなことを行うことができます。

string mynewstring = mystring.Replace("  ", " ");

while (mynewstring.Contains("  "))
{
  mynewstring = mystring.Replace("  ", " ");
}
于 2012-04-16T02:03:32.587 に答える