使用 C# 在 XML 文件中转换 CSV
Posted
技术标签:
【中文标题】使用 C# 在 XML 文件中转换 CSV【英文标题】:Convert CSV in XML file with C# 【发布时间】:2021-12-02 00:15:18 【问题描述】:我编写了这段代码,它允许我读取 CSV 文件并将其转换为 XML 文件。 我有一个问题,如果在 CSV 文件中有分号 (;) 程序无法读取数据,如果有逗号 (,) 分隔程序可以读取数据的单词并将它们正确插入 XML 文件. 你能找到用逗号 (,) 替换分号 (;) 的方法吗? 非常感谢!! :)
这是代码:
writer.WriteStartDocument();
writer.WriteStartElement("DC8_Recipes");
using (CsvReader reader = new CsvReader(path))
reader.ReadHeaders();
while (reader.ReadRecord())
writer.WriteStartElement("DC8_Recipes");
writer.WriteAttributeString("PlantNo", reader["id_imp"]);
writer.WriteAttributeString("No", reader["nome_frm"]);
writer.WriteAttributeString("Name", reader["desc_frm"]);
writer.WriteEndElement();
reader.Close();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
logText.Text += DateTime.Now + " Convertion Completed\n";
logText.Text += DateTime.Now + " Saving file to: " + savepath + "\n";
try
logText.Text += DateTime.Now + " File save completed!\n";
logText.Text += DateTime.Now + " process END\n";
catch
【问题讨论】:
请将代码作为文本直接发布到您的问题中,而不是作为图像。 另外,我相信 CsvHelper 有办法设置分隔符。这应该比更改您的输入更可取。不过我可能是错的。 您没有发布CsvReader
的代码,但它应该支持不同的文化,因此您可以使用CultureInfo
对其进行初始化。然后您可以通过CultureInfo.TextInfo.ListSeparator
属性选择正确的分隔符。当当前文化表示使用逗号作为小数分隔符的语言时,这也是 Excel 生成以分号分隔的 CSV 文件的方式。
我找到了一个更改 CsvHelper 分隔符的主题。希望对您有所帮助:***.com/questions/30437440/…
编写您自己的使用字符串拆分的 CSVReader,而不是无法运行的 3rd 方应用程序。它只有几行代码。
【参考方案1】:
您可以将CsvConfiguration
传递给CsvReader
构造函数以更改默认分隔符(which is based on the current CultureInfo):
区域性用于确定类型转换时的默认分隔符、默认行尾和格式。
using (var csv = new CsvReader(writer, new CsvConfiguration(CultureInfo.InvariantCulture)
Delimiter = ","
))
csv.Read();
【讨论】:
【参考方案2】:你可以自己写CsvReader
:
public static List<Model> ReadCsv(string path)
var modelList = new List<Model>();
using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var streamReader = new StreamReader(fileStream, Encoding.Default))
while (!streamReader.EndOfStream)
var line = streamReader.ReadLine();
if (string.IsNullOrEmpty(line))
continue;
var splittedLine = line.Split(';');
var model = new Model();
for (var i = 0; i < splittedLine.Length; i++)
switch (i)
case 0:
model.FirstColumn = splittedLine[i];
break;
case 1:
model.SecondColumn = splittedLine[i];
break;
case 2:
model.ThirdColumn = Convert.ToInt32(splittedLine[i]);
break;
modelList.Add(model);
return modelList;
【讨论】:
以上是关于使用 C# 在 XML 文件中转换 CSV的主要内容,如果未能解决你的问题,请参考以下文章
我正在使用 C# 将 XML 文件转换为 CSV。我尝试了不同的方法,但无法弄清楚如何访问键名/值对