所以目前我们的ERP / PSA软件生成一个EFT(电子资金转账).txt文件,其中包含银行和员工银行信息,然后发送给银行。
问题如下,目前生成EFT文件的格式是美国标准,不适用于加拿大银行标准。但我有所需的加拿大银行标准格式。
文件的格式是关于文件中的列数和它们包含的字符数(如果列的数据没有达到用空格填充的字符数)。
所以我......
1011234567Joe,Bloggs 1234567
例如,我想尝试转换为加拿大标准
A101Joe,Bloggs 1234567 1234567
例如,“A”需要添加到记录的第一行。
我只是想知道如何在C#中执行这样的任务
即
读入文本文件。 逐行解析数据的开始和结束数据 为变量赋值 使用具有不同排序和附加数据的这些变量重建新文件
答案 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());