如何转换.txt文件中的电子资金转账数据
因此,目前我们的ERP / PSA软件生成一个EFT(电子资金转账).txt文件,其中包含银行和员工银行信息,然后发送给银行。
问题如下EFT文件当前生成的格式是美国标准,不适合加拿大银行标准。 但我有所需的加拿大银行标准格式。
文件的格式是关于文件中的列数和它们包含的字符数(如果列的数据没有达到填充空格的字符数)。
所以,就是这样
1011234567Joe,Bloggs 1234567
例如,我想尝试转换为加拿大标准
A101Joe,Bloggs 1234567 1234567
例如,“A”需要添加到记录中的第一行。
我只是想知道如何在C#中执行这样的任务
即
读入文本文件。 逐行解析数据的开始和结束分配给变量的值使用不同的排序和附加数据重建这些变量的新文件
我的IDE没有打开,所以我的语法可能有点过时,但我会试着指出你正确的方向。 无论如何,直接给你解决方案有什么乐趣?
首先,您将要获得一个行列表:
IEnumerable lines = text.Split('\n');
您说列没有分隔符,而是具有固定宽度,但您没有提到列大小的定义位置。 通常,您将要删除每列的文本
colText = line.Substring(startOfColumn, lengthOfColumn);
对于每列,您必须计算startOfColumn和lengthOfColumn,具体取决于列的位置和长度。
希望这对你来说是一个很好的基础。
我认为最好的办法是创建一个类来保存文件中存在的逻辑数据,并在此类中使用方法来解析给定格式的数据并将其保存回给定格式。
例如,假设以下类:
public class EFTData { public string Name { get; set; } public string RoutingNumber { get; set; } public string AccountNumber { get; set; } public string Id { get; set; } public void FromUSFormat(string sLine) { this.Id = sLine.Substring(0, 3); this.RoutingNumber = sLine.Substring(3, 7); this.Name = sLine.Substring(10, 20); this.AccountNumber = sLine.Substring(30, 7); } public string ToCanadianFormat() { var sbText = new System.Text.StringBuilder(100); // Note that you can pad or trim fields as needed here sbText.Append("A"); sbText.Append(this.Id); sbText.Append(this.RoutingNumber); sbText.Append(this.AccountNumber); return sbText.ToString(); } }
然后,您可以从US文件中读取并写入加拿大文件,如下所示:
// Assume there is only a single line in the file string sLineToProcess = System.IO.File.ReadAllText("usin.txt"); var oData = new EFTData(); // Parse the us data oData.FromUSFormat(sLineToProcess); // Write the canadian data using (var oWriter = new StreamWriter("canout.txt")) { oWriter.Write(oData.ToCanadianFormat()); }
var lines = File.ReadAllLines(inputPath); var results = new List(); foreach (var line in lines) { results.Add(string.Format("A{0}", line)); } File.WriteAllLines(outputPath, results.ToArray());