前言:我正在編寫一套程序,用於從共享驅動器中檢索文件,將它們轉換爲數據庫中的幾個表格,使用戶能夠執行CRUD操作記錄在數據庫中(通過MVC4 ASP.NET Web應用程序),然後將數據庫中的記錄重新組合爲相同的文件格式,並將這些文件傳回大型機。這些文件表示從主機VSAM文件提取的數據,我無法控制格式。還有其他一些類似的項目即將出現 - 檢索,翻譯,編輯,彙編和上傳大型機提取文件。一切都完成了,但是我編寫代碼來組裝文件的方式不可重複使用,並且只針對當前項目域模型中的實體對象。如何爲實體對象生成自定義文本文件
機會:由於其他即將到來的項目的文件中的數據是非常相似的格式,我想有一些可重新編譯的代碼來重新組合這些文件。
數據:下面代表一些模擬文件數據。文件中的每行文本(我現在稱之爲記錄)可以是特定的長度(本例中爲80字節)。該記錄可以是以星號爲前綴的評論。未註釋的記錄可以是4種不同的類型。
- 線
- 序列拖車
- 表拖車
- 表型拖車
A '線' 屬於 '序列'(序列號 - 唯一獨特的表) 。 「序列」屬於「表」(表格鍵 - 文件唯一)。 '表'有一個類型,表格按照它們的類型和文件中的鍵進行排序。
線路有下述順序的:
- 三位數的業務代碼。
- 三字符表類型。
- 五個字符表鍵。
- 九位序列號。留下零填充。
- 六位數行號。留下零填充。
- 三字符動作碼。
- One character incl。碼。
- 五位數值的長度。
- 其餘都是價值。
的序列拖車具有下述順序的:
- 三位數的業務代碼。
- 三字符表類型。
- 五個字符表鍵。
- 九位序列號。留下零填充。
- 五位填充符('9')。
- 序列中的九位數行數(左邊填零)。
表拖車具有下述順序的:
- 三位數的業務代碼。
- 三字符表類型。
- 五個字符表鍵。
- 十四位數填充符('9')。
- 表中序列的九位數計數(左填零)。
的桌子拖車具有下述順序的:
- 三位數的業務代碼。
- 三字符表類型。
- 十九位數填充符('9')。
- 文件中有9位數的表格(帶#2表格類型)。 (左零填充)。
表尾部在文件中的每個有序表集之後發生。
************************************************************************ * TABLE 00001 - SOME MORE COMMENTS * 04/04/11 CREATED TABLE ************************************************************************ * COMMENT FOR SEQ 1 720PFT0000100000001000001PROI00011E1037-E1039 720PFT0000100000001000002PGMI000016 720PFT0000100000001000003RTN 00004 NAC 720PFT0000100000001099999000000003 * COMMENT FOR SEQ 2 720PFT0000100000003000001PROI00011E1037-E1039 720PFT0000100000003000002CLSI000037,8 720PFT0000100000003000003MEDE000010 720PFT0000100000003000004RTN 00004 NAC 720PFT0000100000003099999000000004 720PFT0000199999999999999000000002 720PFT9999999999999999999000000001
代碼:以下表示域模型的實體(我排除了簡潔相關實體):
[Table("Line",Schema="Pft")]
public class Line
{
#region Entity Properties
[Key]
public int LineId { get; set; }
[Required]
public short LineNumber { get; set; }
[StringLength(255)]
public string Comment { get; set; }
[Required]
public int SequenceId { get; set; }
[Required]
public int IncludeExcludeId { get; set; }
[Required]
public int QualifierId { get; set; }
[Required]
[ForeignKey("PlanFlexTable")]
public int PlanFlexTableId { get; set; }
#endregion
}
[Table("Sequence", Schema="Pft")]
public class Sequence
{
#region Entity Properties
[Key]
public int SequenceId { get; set; }
[Required]
public int SequenceNumber { get; set; }
[StringLength(511)]
public string Comment { get; set; }
#endregion
}
[Table("PlanFlexTable", Schema = "Pft")]
public class PlanFlexTable
{
#region Entity Properties
[Key]
public int PlanFlexTableId { get; set; }
[Required]
public int StatusId { get; set; }
[StringLength(5, MinimumLength = 5)]
[Required]
public string Key { get; set; }
[StringLength(255)]
[Required(AllowEmptyStrings = true)]
public string Title { get; set; }
[Display(Name="Table Comment")]
public string Comment { get; set; }
public int PlanFlexTableTypeId { get; set; }
public int UpdateHistoryId { get; set; }
[StringLength(3)]
[Required]
public string PlanId { get; set; }
#endregion
}
摘要:我尋求建議用於發電的可重用的方式像我上面提到的文件。目前,我有一個類需要一個IEnumerable的PlanFlexTable實體,並對它進行迭代以組裝要上傳的文件。我曾考慮使用反射來創建一些屬性,以便讓實體定義如何構建文件;不過,我真的很感激有關於其他可能性的更多反饋和想法。
謝謝!
閱讀所有這些教科書並不容易.. :) – codingbiz