C# 使用C创建数据并将数据写入CSV文件时出现的问题#
我正在使用Ranorex 5.4.2中的C#代码创建一个CSV文件,从XML文件中收集数据,然后将其写入CSV文件。我已经设法让这个过程正常工作,但是我遇到了一个问题,在收集的数据下面创建了12个空行 我有一个名为CreateCSVFile的文件,它创建CSV文件并在中添加标题,代码如下所示:C# 使用C创建数据并将数据写入CSV文件时出现的问题#,c#,xml,csv,variables,ranorex,C#,Xml,Csv,Variables,Ranorex,我正在使用Ranorex 5.4.2中的C#代码创建一个CSV文件,从XML文件中收集数据,然后将其写入CSV文件。我已经设法让这个过程正常工作,但是我遇到了一个问题,在收集的数据下面创建了12个空行 我有一个名为CreateCSVFile的文件,它创建CSV文件并在中添加标题,代码如下所示: writer.WriteLine("PolicyNumber,Surname,Postcode,HouseNumber,StreetName,CityName,CountyName,VehicleRegi
writer.WriteLine("PolicyNumber,Surname,Postcode,HouseNumber,StreetName,CityName,CountyName,VehicleRegistrationPlate,VehicleMake,VehicleModel,VehicleType,DateRegistered,ABICode");
writer.WriteLine("");
writer.Flush();
writer.Close();
string _PolicyHolderSurname = "";
[TestVariable("222D47D2-6F66-4F05-BDAF-7D3B9D335647")]
public string PolicyHolderSurname
{
get { return _PolicyHolderSurname; }
set { _PolicyHolderSurname = value; }
}
下一个要运行的是MineDataFromOutputXML。我正在自动化的程序提供保险报价,并创建一个包含客户详细信息的输出xml文件。我已经设置了一个挖掘过程,在顶部声明了一个变量,如下所示:
string _PolicyHolderSurname = "";
[TestVariable("3E92E370-F960-477B-853A-0F61BEA62B7B")]
public string PolicyHolderSurname
{
get { return _PolicyHolderSurname; }
set { _PolicyHolderSurname = value; }
}
然后还有另一段代码从XML文件中收集信息:
var QuotePolicyHolderSurname = (XmlElement)xmlDoc.SelectSingleNode("//cipSurname");
string QuotePolicyHolderSurnameAsString = QuotePolicyHolderSurname.InnerText.ToString();
PolicyHolderSurname = QuotePolicyHolderSurnameAsString;
Report.Info( "Policy Holder Surname As String = " + QuotePolicyHolderSurnameAsString);
Report.Info( "Quote Policy Holder Surname = " + QuotePolicyHolderSurname.InnerText);
最后一个文件称为SetDataSource,它将信息放入CSV文件中,顶部声明了一个变量,如下所示:
writer.WriteLine("PolicyNumber,Surname,Postcode,HouseNumber,StreetName,CityName,CountyName,VehicleRegistrationPlate,VehicleMake,VehicleModel,VehicleType,DateRegistered,ABICode");
writer.WriteLine("");
writer.Flush();
writer.Close();
string _PolicyHolderSurname = "";
[TestVariable("222D47D2-6F66-4F05-BDAF-7D3B9D335647")]
public string PolicyHolderSurname
{
get { return _PolicyHolderSurname; }
set { _PolicyHolderSurname = value; }
}
这是将其添加到CSV文件中的代码:
string Surname = PolicyHolderSurname;
Report.Info("Surname = " + Surname);
dataConn.Rows.Add(new string[] { Surname });
dataConn.Store();
在Mine和SetDataSource文件中有多个项目,并且在Notepad++中的输出如下所示:
我认为问题在于CreateCSVFile和writer.WriteLine函数。我已经注释掉了这个区域,但是它会生成CSV,只显示标题
我问过一些与我一起工作的开发人员,但大多数人对C#不太了解,目前还没有人能够解决这个问题。如果有区别,则在Windows Server 2012r2上进行
任何关于这个的问题,请问,我可以提供完整的文件,如果需要的话,他们只是相当长和重复
谢谢
本·贾丁(Ben Jardine)我在拉诺雷斯也有同样的事情要做。因为这个问题有点老了,我没有检查你的代码,但这里是我做的和正在工作的。我发现了一个在C#中创建csv文件的示例(可能在堆栈上),因此下面是我在Ranorex UserCodeCollection中使用的改编:
[UserCodeCollection]
public class UserCodeCollectionDemo
{
[UserCodeMethod]
public static void ConvertXmlToCsv()
{
System.IO.File.Delete("E:\\Ranorex_test.csv");
XDocument doc = XDocument.Load("E:\\lang.xml");
string csvOut = string.Empty;
StringBuilder sColumnString = new StringBuilder(50000);
StringBuilder sDataString = new StringBuilder(50000);
foreach (XElement node in doc.Descendants(GetServerLanguage()))
{
foreach (XElement categoryNode in node.Elements())
{
foreach (XElement innerNode in categoryNode.Elements())
{
//"{0}," give you the output in Comma seperated format.
string sNodePath = categoryNode.Name + "_" + innerNode.Name;
sColumnString.AppendFormat("{0},", sNodePath);
sDataString.AppendFormat("{0},", innerNode.Value);
}
}
}
if ((sColumnString.Length > 1) && (sDataString.Length > 1))
{
sColumnString.Remove(sColumnString.Length-1, 1);
sDataString.Remove(sDataString.Length-1, 1);
}
string[] lines = { sColumnString.ToString(), sDataString.ToString() };
System.IO.File.WriteAllLines(@"E:\Ranorex_test.csv", lines);
}
}
仅供参考,my xml的简单版本如下所示:
<LANGUAGE>
<ENGLISH ID="1033">
<TEXT>
<IDS_TEXT_CANCEL>Cancel</IDS_TEXT_CANCEL>
<IDS_TEXT_WARNING>Warning</IDS_TEXT_WARNING>
</TEXT>
<LOGINCLASS>
<IDS_LOGC_DLGTITLE>Log In</IDS_LOGC_DLGTITLE>
</LOGINCLASS>
</ENGLISH>
<FRENCH ID="1036">
<TEXT>
<IDS_TEXT_CANCEL>Annuler</IDS_TEXT_CANCEL>
<IDS_TEXT_WARNING>Attention</IDS_TEXT_WARNING>
</TEXT>
<LOGINCLASS>
<IDS_LOGC_DLGTITLE>Connexion</IDS_LOGC_DLGTITLE>
</LOGINCLASS>
</FRENCH>
</LANGUAGE>
取消
警告
登录
环空器
敬告
连接
您实际在哪里写入csv文件?插入标题后?我建议查看LinqToCSV,使创建和使用csv文件变得非常简单:在上一段代码摘录中,“dataConn”是在Ranorex测试套件中创建的Ranorex数据连接器吗?我想看看它是如何定义的。依我看,使用IO.file.AppendText写入文件比使用Ranorex数据连接器更简单。如果需要,可以运行TestCase.Current.DataContext.ReloadData()来重新加载测试数据。