如何从c#中从.txt文件中提取的字符串中解析单个数据字段

时间:2016-02-04 20:01:27

标签: c# parsing

我目前正在开发一个解析生产报告的项目。生产报告上传到我们的网站,然后输入一个请求来解析它们。这些文件放在一个SqlServer数据库中,我们可以引用该数据库将文件拉入代码中。我面临的问题是,在我的代码中访问.txt文件后,我不知道如何在程序读取文件时解析每行的各个数据字段。我试图将每行的值存储到准备好的变量表中,将数据从行解析回SqlServer数据库,然后移到下一行并重复。这是我目前拥有的代码块。 if语句跳过不重要的文件行,else语句是我想解析每行数据的地方。

StreamReader reader = new StreamReader(fileLocation);
string strAllFile = reader.ReadToEnd().Replace("\r\n\n", "\n").Replace("\r\n", "\n").Replace("\n\r", "\n");
string[] arrLines = strAllFile.Split(new char[] { '\n' });
int i = 0;

if (strAllFile.IndexOf("Annualized Production") >= 0) //parse that way 
{
    while (i < arrLines.Length)
    {
        FileToParse RNIC = new FileToParse();

        string test = arrLines[i];
        if (test.IndexOf("\fPROD13") >= 0) //skip to useful info
        {
            i = i + 5;
        }
        else //do everything else
        {
            //create the populated model to be returned


            i++;

        }

这是我用来存储解析

值的变量表
public class Example
{       
    public int UserID { get; set; }
    public int BranchID { get; set; }
    public int CompanyID = 1;
    public int WritingNumberID { get; set; }
    public int ProductID { get; set; }
    public string WritingNumber { get; set; }
    public string BranchName { get; set; }
    public string ProductName { get; set; }
    public decimal NetHouseholdSales { get; set; }
    public decimal RefundPercentage { get; set; }
    public decimal GrossInitialPremium { get; set; }
    public decimal NetPremium { get; set; }
    public decimal BaseNetPremium { get; set; }
    public decimal RefundAmount { get; set; }
    public int Applications { get; set; }
    public int BankDraftApps { get; set; }
    public int ApplicationsSplit { get; set; }
    public int BankDraftAppsSplit { get; set; }
    public int QtyOfRefunds { get; set; }
    public int QtyOfBankDraftRefunds { get; set; }
    public int QtyOfRefundsSplit { get; set; }
    public int QtyOfBankDraftRefundsSplit { get; set; }

}

另一个问题是文件中的每一行都不包含相同的数据类型,一次有3行包含有用的数据,第一行包含一组,接下来的两行包含相同的第二组除了一个不同的开始变量。

1 个答案:

答案 0 :(得分:0)

“我面临的问题是......我不知道如何解析每行的各个数据字段”。

嗯,这取决于。您没有告诉我们数据的格式,所以我们也不知道该怎么做。一些有用的字符串方法是:string.Split(),string.Substring(),string.StartsWith(),string.EndsWith()。或者你可以进入RegEx。

要将字符串转换为数字,您可以使用Parse()方法或直接调用Convert:

例如关于Substring和Parse:也许UserId 总是 5个字符长,总是从字符串的字符位置21开始:string UserIdString = test.Substring(21,5);,然后到使它成为一个int:int UserId = Int32.Parse(UserIdString);

拆分和转换:也许每一行都以逗号分隔,而UserId 总是第三个​​元素:int UserId = Convert.ToInt32(test.Split(',')[2]);