C# 如何编写自定义文本阅读器
我有一个文本文件,包含以下格式的信息。我想读取数据并执行一些操作。读取此数据的最佳方式是什么 [Employee Personal] Name: Wayne Rooney Age : 34 [End Employee Personal] [Employee salary] Salary : 300k/Week [end Employee salary] [Employee Personal] Name: Rashford Age: 22 [End Employee Personal] [Employee salary] Salary : 200k/week [end Employee salary 请尝试以下代码:C# 如何编写自定义文本阅读器,c#,.net,C#,.net,我有一个文本文件,包含以下格式的信息。我想读取数据并执行一些操作。读取此数据的最佳方式是什么 [Employee Personal] Name: Wayne Rooney Age : 34 [End Employee Personal] [Employee salary] Salary : 300k/Week [end Employee salary] [Employee Personal] Name: Rashford Age: 22 [End Employee Personal] [E
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.txt";
static void Main(string[] args)
{
Employee.ReadFile(FILENAME);
foreach (Employee employee in Employee.employees)
{
Employee.Print(employee);
}
Console.ReadLine();
}
}
public class Employee
{
public static List<Employee> employees { get; set; }
public string name { get; set; }
public int age { get; set; }
public string salary { get; set; }
enum State
{
PERSONAL,
SALARY,
NONE
}
public static void ReadFile(string filename)
{
StreamReader reader = new StreamReader(filename);
string line = "";
State state = State.NONE;
Employee employee = null;
while ((line = reader.ReadLine()) != null)
{
line = line.Trim();
if (line.Length > 0)
{
if (line.StartsWith("["))
{
line = line.Replace("[", string.Empty);
line = line.Replace("]", string.Empty);
if (line.ToUpper().StartsWith("END"))
{
state = State.NONE;
if(line != "End Employee Personal")
employee = null;
}
else
{
switch (line)
{
case "Employee Personal":
state = State.PERSONAL;
employee = new Employee();
if (employees == null) employees = new List<Employee>();
employees.Add(employee);
break;
case "Employee salary":
state = State.SALARY;
break;
}
}
}
else
{
if(line.Contains(":"))
{
string[] properties = line.Split(new char[] { ':' }).ToArray();
switch (state)
{
case State.PERSONAL :
switch (properties[0].Trim())
{
case "Name" :
employee.name = properties[1].Trim();
break;
case "Age" :
employee.age = int.Parse(properties[1]);
break;
}
break;
case State.SALARY :
employee.salary = properties[1].Trim();
break;
}
}
}
}
}
}
public static void Print(Employee employee)
{
Console.WriteLine("Name : '{0}', Age : '{1}', Salary : '{2}'", employee.name, employee.age, employee.salary);
}
}
}
文件的格式要求是这样的,标签放在方括号中吗?为什么不仅仅是一个普通的可序列化格式,比如json或xml?是的,它是一个遗留代码,文件格式必须是这样的只是为了清楚,它包含[Employee Personal]?是的。它表示块的开始。[End Employee Personal]表示该数据块的结束。您是否可以使用格式化为代码的虚假数据显示实际的文件提取?我不清楚姓名年龄应该如何运作。此外,如果这些是唯一的领域,那么我将尝试类似的领域。