3

我在 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();

下一个要运行的是 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 文件中,在顶部声明了一个变量,如下所示:

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++ 中的输出如下所示:

显示代码运行后的 CSV 文件的图片

我相信问题在于 CreateCSVFile 和 writer.WriteLine 函数。我已将此区域注释掉,但它随后会生成仅显示标题的 CSV。

我问过一些与我一起工作的开发人员,但大多数人都不太了解 C#,而且还没有人能够解决这个问题。如果它有所作为,那就是在 Windows Server 2012r2 上。

对此有任何问题请提出,如果需要,我可以提供整个文件,它们只是相当长且重复。

谢谢本怡和

4

1 回答 1

2

我在 Ranorex 也有同样的事情要做。由于这个问题有点老了,我没有检查你的代码,但这是我所做的并且正在工作。我找到了一个在 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);
        }
}

供您参考,我的 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>
于 2017-01-30T11:17:56.640 回答