如何将字符串行转换为修复大小数组?

时间:2014-03-19 05:56:50

标签: c# string

我在c#中读取.txt文件。我有一个问题,如我的txt文件包含超过2000行,它将需要大量的时间来执行,因为目前我逐行读取并使用子字符串函数进行拆分数据。 每行包含一个员工详细信息。 在行中我将数据导入修复位置,如

Employee Name     = 0 to 50 Character,
Employee Address  = 51 to 200 Character,
Employee BDate    = 201 to 215 Character,
Employee Gender   = 216 to 220 Character

等。

是否有任何技术可以使用此字段读取线并将其拆分为数组或其他内容? 我想改善表现。

4 个答案:

答案 0 :(得分:2)

您可以使用File.ReadLinesIEnumerable<string>

Employee[] employees = new Employee[2000];

int index = 0;

foreach (var line in File.ReadLines("data.txt")) 
{
    var employee = new Employee();
    employee.Name = line.Substring(0,50);
    employee.Address = line.Substring(51,150);
    employee.BDate = line.Substring(201,15);
    employee.Gender = line.Substring(216,5);
    employees[index++] = employee;
}

答案 1 :(得分:1)

如果您需要阅读所有2000多行,请使用ReadToEnd()。然后你可以并行执行行解析。

答案 2 :(得分:1)

您可以使用File.ReadAllLines():

var textLines = File.ReadAllLines();

foreach (var line in textLines)
{
   var name = line.Substring(51);
   var address = line.Substring(51,150);
   var bdate = line.Substring(201, 15);
   var gender = line.Substring(216,5);
}

答案 3 :(得分:1)

您可以使用Parallel ForEach来提高性能。请参阅以下代码。

public class Employee
{
   public string Name { get; set; }
   public string Address { get; set; }
   public string DOB { get; set; }
   public string Gender { get; set; }
}

var textLines = File.ReadAllLines("FileName.txt");
var employees = new List<Employee>();
Parallel.ForEach(textLines,
    emp =>
    employees.Add(new Employee()
    {
       Name = emp.Substring(51),
       Address = emp.Substring(51, 150),
       DOB = emp.Substring(201, 15),
       Gender = emp.Substring(216, 5)
    }));