Writing to File
Describes how to output a data table to a file
1. Write to file
Once you have added all the data to the OutputTable
, you can write the data to a file. The output data file is in .csv format and is stored in the solution path Output folder. After registering the data table in the OutputManager
, it can be written to a file using the WriteToFile
method.
OutputTable outputTable = new OutputTable();
SampleOutputData row = new SampleOutputData(); // Create data row
row.COL_1 = 1;
row.COL_2 = 2;
outputTable.AddRow(row); // Add data row to table
OutputManager.Instance.SetOutput(outputTable.Name, outputTable); // Register table in OutputManager
outputTable.WriteToFile(); // Write to .csv file
When writing to a file, the WriteToFile
method provides the following functionality
Appending to the last line of an existing file
If a file with the same filename exists, you can append to the contents of the existing file to output data as needed without deleting the existing file. This can be accomplished by setting the value of the isAppend parameter of the WriteToFile
method to True. The example code below outputs data following the last line of an existing file.
outputTable.WriteToFile(path, true); // Append data to an existing file
Setting whether to add column names for the first row
When writing to a file, the default is to write the column names of the corresponding output data schema in the first row. However, you can choose not to write the column names in the first row as needed. You can accomplish this by setting the value of the isHeaderInclude parameter of the WriteToFile
method to False. The example code below prevents the column names from being written to the first row.
outputTable.WriteToFile(path, false, false); // Not include header (column names)
Setting file name
When writing to a file, it defaults to writing the file name to be the same as the output data schema name. Users can change the output file name as needed. This can be accomplished by setting the file name you want to change in the value of the name parameter of the WriteToFile
method. The example code below renames the file to "Result".
outputTable.WriteToFile(path, false, true, "Result"); // Set file name to "Result"
2. Example code
The following example code outputs the contents of the Best Solution in the OnDoneSolve
method, which is called after the end of the Solver run. It defines the Result output data schema to correspond to the Solution structure and adds data rows to the OutputTable
. After adding the data is complete, write that data table to a file.
public override void OnDoneSolve()
{
OutputManager outputManager = OutputManager.Instance;
OutputTable resultsTable = new OutputTable();
SolutionManager solutionManager = SolutionManager.Instance;
Solution bestSol = solutionManager.BestSolution;
IOrderedEnumerable<KeyValuePair<int, State>> states = bestSol.States.OrderBy(x => x.Key);
int seq = 1;
foreach (KeyValuePair<int, State> item in states)
{
CRPState state = item.Value as CRPState;
if (state.IsInitial)
continue;
Result row = new Result();
row.SEQUENCE = seq;
row.CONVEYOR = state.CurrentConveyor.ConveyorNum;
row.JOB = state.LastRetrievedJob.Number;
row.COLOR = state.LastRetrievedJob.Color.ColorNumber;
resultsTable.AddRow(row);
seq++;
}
outputManager.SetOutput(resultsTable.Name, resultsTable);
resultsTable.WriteToFile();
}
Last updated