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.
CSV 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
Note that the Session class illustrates how events are used.
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();
}
}
}
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;
}
}
}
}