Итак, еще раз я неправильно понял основную концепцию c - PostExecute нельзя использовать для записи так, как я пытался. Как указывали люди, здесь невозможно что-либо сделать с содержимым буфера.
Я не могу взять кредит на этот ответ, так как опять кто-то умнее меня пришел на помощь, но я получил разрешение от им разместить код на случай, если он кому-нибудь пригодится. Я надеюсь, что объяснил это хорошо, так как я только сам понимаю это и очень много учусь, пока я go вперед.
Прежде всего, убедитесь, что в вашем пространстве имен есть следующее:
using System.Reflection;
using System.Linq;
using System.Collections.Generic;
Они будут использоваться для получения свойств выходного буфера и для вывода первого элемента в списке в pos_1, второго в pos_2, et c.
Как обычно, у меня есть две логические переменные, чтобы определить, прошел ли я строку, которая указывает строки данных, которые я хочу начать или закончить, и у меня есть свой список.
bool passedSOF;
bool passedEOF;
List<string> fieldlist = new List<string>();
Вот где это отличается - так как у меня есть что-то, что указывает на то, что я обработал свои строки, то есть строку, содержащую END-OF-FIELDS, когда я достигну этой точки, я должен записать мой собранный список в мой выходной буфер. Цель состоит в том, чтобы взять все несколько строк, содержащих имена полей, и превратить их в одну строку с несколькими столбцами, с именами полей, заполненными в этих столбцах в порядке их появления.
if (Row.RawData.Contains("END-OF-FIELDS"))
{
passedEOF = true;
//IF WE HAVE GOT TO THIS POINT, WE HAVE ALL THE DATA IN OUR LIST NOW
OutputBuffer.AddRow();
var fields = typeof(OutputBuffer).GetProperties();
//SET UP AND INITIALISE A VARIABLE TO HOLD THE ROW NUMBER COUNT
int rowNumber = 0;
foreach (var fieldName in fieldList)
{
//ADD ONE TO THE CURRENT VALUE OF rowNumber
rowNumber++;
//MATCH THE ROW NUMBER TO THE OUTPUT FIELD NAME
PropertyInfo field = fields.FirstOrDefault(x = > x.Name == string.Format("pos{0}", rowNumber));
if (field != null)
{
field.SetValue(OutputBuffer, fieldName);
}
}
OutputBuffer.SetEndOfRowset();
}
if (passedSOF && !passedEOF)
{
this.fieldList.Add(Row.RawData);
}
if (Row.RawData.Contains("START-OF-FIELDS"))
{
passedSOF = true;
}
Итак вместо того, чтобы что-то вроде этого:
- НАЧАЛО ПОЛЯ
- ФРУКТЫ
- МОЛОЧНЫЕ
- КУРИЛЬНЫЕ
- КОНЕЦ- OF-FIELDS
У меня есть вывод:
pos_1 | pos_2 | pos_3
ФРУКТЫ | МОЛОЧНАЯ | STARCHES
Таким образом, я могу построить таблицу ключей позиции, чтобы показать, какое поле будет отображаться в каком порядке в текущем месячном файле, и теперь я жду, когда у меня возникнут дополнительные проблемы с разделением фактических строк данных на другие. таблица:)