C# 使用C创建数据并将数据写入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

我正在使用Ranorex 5.4.2中的C#代码创建一个CSV文件,从XML文件中收集数据,然后将其写入CSV文件。我已经设法让这个过程正常工作,但是我遇到了一个问题,在收集的数据下面创建了12个空行

我有一个名为CreateCSVFile的文件,它创建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; }
    }
下一个要运行的是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()来重新加载测试数据。