0

次のようなデータを保持する .CSV ファイルがあります。

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
Russ Leth,9720,77542,72705,12/16/2011

ファイルストリームを使用してデータを読み取りながら、行へのポインターを設定しようとしています。

  1. C#でファイルの各行のHDDの場所へのポインタを設定できますか?
  2. 各行のバイト数はわかりますが、各行の開始位置はわかりません...
  3. ストリーム自体で各行が終了する場所を特定できますか?

このコードは、現在問題なくファイルを読み取ります。

public static void seeks()
    {
        using (FileStream fs = new FileStream(@"C:\Users\bussard\Documents\James T work\SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
        {
            fs.Seek(0, SeekOrigin.Begin);
            while ((nextByte = fs.ReadByte()) >= 0)
            {
                Console.Write(Convert.ToChar(nextByte));
            }
            Console.WriteLine();
        }

    }
4

3 に答える 3

0

あなたが私に与えたアドバイスが私がここで探していた答えにたどり着くのを助けたので、私はあなたの答えの両方に正しいダレンとブランドをマークできたらいいのにと思います. 新しい行が発生する場所に基づいて、ポインターベースのシステムを確立できました。私のコードを投稿して、私が何をしたかをお見せしましょう。

        public static void seeks()
    {

        long offset = 0;
        string streamsample = "";
        int numoflines = 0;
        using (FileStream fs = new FileStream(@"C:\Users\bussard\Documents\JamesTwork\SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
        {
            fs.Seek(offset, SeekOrigin.Begin);
            StreamReader sr = new StreamReader(fs);
            { //determines how many lines are in my file.
                while (!sr.EndOfStream)
                {
                    streamsample = sr.ReadLine();
                    numoflines++;

                }// end while block
                Console.WriteLine("Lines: " + numoflines);
            }//end stream sr block

            long[] dataArray = new long[numoflines]; //create a long array based on amount of lines

            fs.Seek(offset, SeekOrigin.Begin);
            StreamReader dr = new StreamReader(fs);
            {create an array of long values based on where new lines occur as pointers.

                numoflines = 0;
                streamsample = "";

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

                int j = 0;

                while (j < numoflines)
                { // displays the pointer and what data is at that point.
                    fs.Seek(dataArray[j], SeekOrigin.Begin);
                    Console.WriteLine("Pointer: " + dataArray[j].ToString() + " String: " + dr.ReadLine().ToString());
                    j++;
                }//end while
            }//end streamReader dr block

        }//end filestream fs block

    }// end method seeks ()
于 2013-05-19T00:34:50.740 に答える
0

読み取り中に FileStream のPositionを保存します。次に、Seekを使用して位置に移動し、保存した/目的の場所で読み取りを行うことができます。この位置と一緒にバイト数を保存して、この時点で ReadByte ではなく ReadByte を実行できるようにすると思います。

于 2013-05-16T02:36:49.193 に答える