Home Products Fielded Text About

Xilytix: Write CSV file with Sequences using events

This examples shows how a CSV file that is formatted with sequences, can be written using Meta from a Fielded Text Meta File.  It uses this example Sequence Meta File.

The CSV File to be written is:

1,Misty,45

1,Oscar,35

2,Buddy,0.5,35,False

2,Charlie,2,35,True,John,35.0

2,Max,0.5,35,False

3,Bubbles,Orange,Wen

3,Flash,Yellow,Crucian

Console Application.  The Session class illustrates how events are used.

using System;

using Xilytix.FieldedText;


namespace WriteSequence_Events

{

    // When writing files with a Meta that uses sequences, it may be easier to

    // use events.  This is because FieldValueWriteReady will fire for each field

    // in the record and will automatically take into account any sequence redirects.

    //

    // Whenever you set a field value when writing (either directly or via the

    // FieldValueWriteReady event), the writer will check for sequence redirects and

    // immediately invoke any sequence resulting from a redirection.

    // Any subsequent invokations of the FieldValueWriteReady event will take into

    // account the redirection and specify fields arising from the new sequence.

    // Accordingly the application does not need to monitor for redirections.  It

    // just sets the value of each field supplied by the FieldValueWriteReady event.


    public class Session

    {

        // Define Type values

        private const long CatType = 1;

        private const long DogType = 2;

        private const long GoldFishType = 3;


        // 1st dimension is record index, second is field id.

        // null values are not used.

        private static readonly object[,] values = new object[7, 9]

        {

            // TypeFieldId, NameFieldId, RunningSpeedFieldId, WalkDistanceFieldId, TrainingFieldId,

            // TrainerFieldId, SessionCostFieldId, ColorFieldId, ChineseClassificationFieldId

            {CatType, "Misty", 45.0, null, null, null, null, null, null},

            {CatType, "Oscar", 35.0, null, null, null, null, null, null},

            {DogType, "Buddy", 35.0, 0.5, false, null, null, null, null},

            {DogType, "Charlie", 48.0, 2.0, true, "John", 32.0M, null, null},

            {DogType, "Max", 30.0, 0.5, false, null, null, null, null},

            {GoldFishType, "Bubbles", null, null, null, null, null, "Orange", "Wen"},

            {GoldFishType, "Flash", null, null, null, null, null, "Yellow", "Crucian"}

        };


        private bool finished;


        public void Main()

        {

            // Name of file containing Meta

            const string MetaFileName = "ExampleSequenceMeta.ftm";

            // Name of file to be written

            const string CsvFileName = "ExampleSequence.csv";


            // Create Meta from file

            FtMeta meta = FtMetaSerializer.Deserialize(MetaFileName);


            finished = false;


            // Create Writer

            using (FtWriter writer = new FtWriter(meta, CsvFileName))

            {

                writer.FieldValueWriteReady += HandleFieldValueWriteReady;

                writer.RecordFinished += HandleRecordFinished;

                     

                while (!finished)

                {

                    // loop until finished flag is set

                    writer.Write();

                }

            }

        }


        private void HandleFieldValueWriteReady(object sender, FtFieldValueReadyEventArgs e)

        {

            FtField field = e.Field;

            int recordIndex = e.RecordIndex;


            field.AsObject = values[recordIndex, field.Id];

        }


        private void HandleRecordFinished(object sender, FtRecordFinishedEventArgs e)

        {

            if (e.RecordIndex >= values.GetLength(0) - 1)

            {

                finished = true;

            }

        }

    }

}

namespace WriteSequence_Events

{

    class Program

    {

        static void Main(string[] args)

        {

            // Need an object for event handlers.

            // Show example in Session class.

            Session session = new Session();

            session.Main();

        }

    }

}