我目前正在开发一个解析生产报告的项目。生产报告上传到我们的网站,然后输入一个请求来解析它们。这些文件放在一个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行包含有用的数据,第一行包含一组,接下来的两行包含相同的第二组除了一个不同的开始变量。
答案 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]);