gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:14 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com