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

1 つの文字列には、名前、ID、融資額、支払い額、および支払い日が含まれます。私は、ローン金額から支払い金額を差し引き、それを 100 で割ってドルとセントの値を取得することにより、残りの金額を返す方法を用意しています。

これを行った後、日付、名前、最後に負の金額で情報を並べ替えたいと思います。ローンクラスを作成してからローンオブジェクトのリストを作成し、セットに対してLinq for Objectsクエリを実行してこれを取得できることを理解していますが、Linqを使用せずにこれを実行しようとしています....何か提案はありますか?

4

2 に答える 2

0

LINQを使用しないと言ったことは知っています。ただし、次のコード行に 1 行のコードを使用できます。

 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
}

この 1 行のコードに対しては、次のようになります。

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上記で取得したものを使用して、上記で提案した @sfuqua のように IComparable 実装を作成するように操作します。

于 2013-05-21T06:21:35.537 に答える
0

コードのコンテキストに応じて、カスタム クラス/ビジネス オブジェクトを導入することで多くの利点を得ることができます。これにより、コード内の懸念事項を適切に分離できるため、より管理しやすくテストしやすいコードに移行できます。List 型のコレクションでカスタム Sort を呼び出すことができるように、 IComparableインターフェイスを実装できます。

于 2013-05-21T03:14:38.060 に答える