0

这是我拥有的原始数据相同:

Sana Paden,1098,64228,46285,2/15/2011
Ardelle Mahr,1242,85663,33218,3/25/2011
Joel Fountain,1335,10951,50866,5/2/2011
Ashely Vierra,1349,5379,87475,6/9/2011
Amado Loiacono,1406,62789,38490,7/17/2011
Joycelyn Dolezal,1653,14720,13638,8/24/2011
Alyse Braunstein,1657,69455,52871,10/1/2011
Cheri Ravenscroft,1734,55431,58460,11/8/2011

我使用带有嵌套 Streamwriter 的 Filestream 来首先确定文件中有多少行,2 来创建一个 long 数组,这些数组为我提供了文件中每一行的开头。代码和输出如下:

using (FileStream fs = new FileStream(@"C:\SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
{
    fs.Seek(offset, SeekOrigin.Begin);
    StreamReader sr = new StreamReader(fs);
    {
        while (!sr.EndOfStream && fs.CanRead)
        {
            streamsample = sr.ReadLine();
            numoflines++;

        }// end while block
    }//end stream sr block

    long[] dataArray = new long[numoflines];
    fs.Seek(offset, SeekOrigin.Begin);
    StreamReader dr = new StreamReader(fs);
    {
        numoflines = 0;
        streamsample = "";

        while (!dr.EndOfStream && fs.CanRead)
        {
            streamsample = dr.ReadLine();
            //pointers.Add(numoflines.ToString());
            dataArray[numoflines] = offset;
            offset += streamsample.Length - 1;
            numoflines++;
        }// end while

一个字符串包含姓名、ID、贷款金额、付款金额和付款日期。我有一种方法可以通过从贷款金额中减去付款金额然后将其除以 100 来获得美元和美分的价值来返还剩余金额。

完成此操作后,我想按日期、姓名排序我的信息,最后是负数。我知道我可以创建一个贷款类,然后创建一个贷款对象列表并针对该集合运行 Linq for Objects 查询以获取此信息,但我试图在不使用 Linq 的情况下这样做......有什么建议吗?

4

2 回答 2

0

根据代码的上下文,您可以通过引入自定义类/业务对象获得许多好处。它将帮助您在代码中提供良好的关注点分离,从而转向更易于管理和可测试的代码。您可以实现IComparable接口,以便可以对 List 类型的集合调用自定义 Sort。

于 2013-05-21T03:14:38.060 回答
0

我知道你提到不要使用 LINQ。但是,您可以在此处为这行代码使用一行代码:

 using (FileStream fs = new FileStream(@"C:\SourceDatatoedit.csv", FileMode.Open,       FileAccess.Read))
{
  fs.Seek(offset, SeekOrigin.Begin);
  StreamReader sr = new StreamReader(fs);
  {
    while (!sr.EndOfStream && fs.CanRead)
    {
        streamsample = sr.ReadLine();
        numoflines++;

    }// end while block
  }//end stream sr block
}

像这样的这一行代码:

int numoflines = File.ReadLines("SourceDatatoedit.csv").
    Select(line => line.Split(',')).ToList().Count;

或者你甚至可以得到List类似的东西:

var lines = File.ReadLines("SourceDatatoedit.csv").
    Select(line => line.Split(',')).ToList();

然后得到行数

 numoflines = lines.Count;

然后继续使用您喜欢的代码:

  long[] dataArray = new long[numoflines];
fs.Seek(offset, SeekOrigin.Begin);
StreamReader dr = new StreamReader(fs);
{
    numoflines = 0;
    streamsample = "";

    while (!dr.EndOfStream && fs.CanRead)
    {
        streamsample = dr.ReadLine();
        //pointers.Add(numoflines.ToString());
        dataArray[numoflines] = offset;
        offset += streamsample.Length - 1;
        numoflines++;
    }// end while

或者只是使用List上面获得的内容并像上面建议的那样创建一个 IComparable 实现一样使用它。

于 2013-05-21T06:21:35.537 回答