c# - 使用 C# 创建和写入数据到 CSV 文件的问题

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

Picture showing the CSV file after the code has been run

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

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

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

谢谢 怡和

最佳答案

我在 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>

关于c# - 使用 C# 创建和写入数据到 CSV 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155368/

相关文章:

c# - Autofac 处理命令

c# - 从声卡 windows xp 捕获音频数据

python - ElementTree XPath 奇怪的行为

java - 复合类的 Jackson CSV 建模器

python - 如何使用Python将德语变音符号导出到Excel文件中

C# - .NET 4.0 - 该程序集不允许部分受信任的调用方

c# - Task.Delay 与 Task.Yield 融合?

java - 将转义引号读取为 xml 中的转义引号

android - 当 Android 应用程序在设备或模拟器中运行时如何更新 XML 文件?

arrays - BASH - 如何从 CSV 文件的列中提取数据并将其放入数组中?