如何转换电子资金转账的.txt文件中的数据

时间:2011-12-16 04:04:48

标签: c# asp.net text

所以目前我们的ERP / PSA软件生成一个EFT(电子资金转账).txt文件,其中包含银行和员工银行信息,然后发送给银行。

问题如下,目前生成EFT文件的格式是美国标准,不适用于加拿大银行标准。但我有所需的加拿大银行标准格式。

文件的格式是关于文件中的列数和它们包含的字符数(如果列的数据没有达到用空格填充的字符数)。

所以我......

1011234567Joe,Bloggs      1234567

例如,我想尝试转换为加拿大标准

A101Joe,Bloggs    1234567   1234567

例如,“A”需要添加到记录的第一行。

我只是想知道如何在C#中执行这样的任务

读入文本文件。 逐行解析数据的开始和结束数据 为变量赋值 使用具有不同排序和附加数据的这些变量重建新文件

3 个答案:

答案 0 :(得分:1)

我认为最好的办法是创建一个类来保存文件中存在的逻辑数据,并在此类中使用方法来解析给定格式的数据并将其保存回给定格式。

例如,假设以下类:

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();
    }
}

然后,您可以从美国文件中读取并写入加拿大文件,如下所示:

        // 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());
        }

答案 1 :(得分:1)

我的IDE没有打开,所以我的语法可能有点过时,但我会试着指出你正确的方向。无论如何,直接给你解决方案有什么乐趣?

首先,您需要获得一系列行:

IEnumerable<string> lines = text.Split('\n');

你说这些列没有分隔符,而是具有固定宽度,但你没有提到列大小的定义。通常,您希望使用

提取每列的文本
colText = line.Substring(startOfColumn, lengthOfColumn);

对于每一列,您必须根据列的位置和长度计算startOfColumn和lengthOfColumn。

希望这对你来说是一个很好的基础。

答案 2 :(得分:1)

var lines = File.ReadAllLines(inputPath);
var results = new List<string>();
foreach (var line in lines)
{
    results.Add(string.Format("A{0}", line));
}
File.WriteAllLines(outputPath, results.ToArray());