将棘手的字符串转换为CSV格式
我必须从webservice输出创建一个CSV文件,CSV文件使用带逗号分隔符的带引号的字符串。 我不能改变格式 ……
因此,如果我有一个string
它就变成了一个"string"
…如果该值已经引用,则它们将替换为双引号。 例如, str"ing
变成"str""ing"
……
但是,最近由于以下情况,我的导入失败了
如您所见,最终结果如下:
""""",""word1,word2,..."""
这打破了我的导入(将其视为另一个字段)…我认为问题是在原始输入字符串中出现","
。
这种情况是否有CVS转义序列?
更新
上述中断的原因是由于BCP映射文件(BCP实用程序用于将CSV文件加载到SQL db),其终结符定义为","
。 因此,它不会看到1个字段,而是看到2 …但我无法更改映射文件…
我使用这个代码,它一直有效:
/// /// Turn a string into a CSV cell output /// /// String to output /// The CSV cell formatted string public static string StringToCSVCell(string str) { bool mustQuote = (str.Contains(",") || str.Contains(""") || str.Contains("r") || str.Contains("n")); if (mustQuote) { StringBuilder sb = new StringBuilder(); sb.Append("""); foreach (char nextChar in str) { sb.Append(nextChar); if (nextChar == '"') sb.Append("""); } sb.Append("""); return sb.ToString(); } return str; }
根据Ed Bayiates的回答:
/// /// Turn a string into a CSV cell output /// /// String to output /// The CSV cell formatted string private string ConvertToCsvCell(string value) { var mustQuote = value.Any(x => x == ',' || x == '"' || x == 'r' || x == 'n'); if (!mustQuote) { return value; } value = value.Replace(""", """"); return string.Format(""{0}"", value); }
我的便士想:
String[] lines = new String[] { ""","word",word,word2,1,34,5,2,"details"" }; for (int j = 0; j < lines.Length; j++) { String[] fields=lines[j].Split(','); for (int i =0; i
}
根据“Ed Bayiates”的贡献,这里是一个有用的类来补充csv文件:
/// /// helpful class to build csv document /// public class CsvBuilder { /// /// create the csv builder /// public CsvBuilder(char csvSeparator) { m_csvSeparator = csvSeparator; } /// /// append a cell /// public void appendCell(string strCellValue) { if (m_nCurrentColumnIndex > 0) m_strBuilder.Append(m_csvSeparator); bool mustQuote = (strCellValue.Contains(m_csvSeparator) || strCellValue.Contains('"') || strCellValue.Contains('r') || strCellValue.Contains('n')); if (mustQuote) { m_strBuilder.Append('"'); foreach (char nextChar in strCellValue) { m_strBuilder.Append(nextChar); if (nextChar == '"') m_strBuilder.Append('"'); } m_strBuilder.Append('"'); } else { m_strBuilder.Append(strCellValue); } m_nCurrentColumnIndex++; } /// /// end of line, new line /// public void appendNewLine() { m_strBuilder.Append(Environment.NewLine); m_nCurrentColumnIndex = 0; } /// /// Create the CSV file /// /// public void save(string path ) { File.WriteAllText(path, ToString()); } public override string ToString() { return m_strBuilder.ToString(); } private StringBuilder m_strBuilder = new StringBuilder(); private char m_csvSeparator; private int m_nCurrentColumnIndex = 0; }
如何使用它:
void exportAsCsv( string strFileName ) { CsvBuilder csvStringBuilder = new CsvBuilder(';'); csvStringBuilder.appendCell("#Header col 1 : Name"); csvStringBuilder.appendCell("col 2 : Value"); csvStringBuilder.appendNewLine(); foreach (Data data in m_dataSet) { csvStringBuilder.appendCell(data.getName()); csvStringBuilder.appendCell(data.getValue()); csvStringBuilder.appendNewLine(); } csvStringBuilder.save(strFileName); }
解析这个的第一步是删除你的字符串周围额外添加的“。”一旦你这样做,你应该能够处理嵌入的“以及”。
经过深思熟虑后,决定需要修复导入实用程序格式。 字符串的转义是正确的(如用户所示)但导入实用程序使用的格式文件不正确并导致它导致导入中断。
谢谢大家特别感谢@dbt(投票)
上述就是C#学习教程:将棘手的字符串转换为CSV格式分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1009851.html