我正在尝试在我的数据库中读取并上传某个csv文件,其中包含用户选择的某些数据。让我们说数据包含姓名,年龄和身高。问题是名称包含逗号(,)。
示例:
马克,史密斯20 170由于系统会认为这是另一个领域并将分裂。下面是我正在使用的代码,我需要过滤这个逗号并在拆分成不同的列之前删除它。
openFileDialog1.ShowDialog();
var fileName = string.Format(openFileDialog1.FileName);
StreamReader sr = new StreamReader(fileName);
string line = sr.ReadLine();
string[] value = line.Split(',');
DataTable dt = new DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = sr.ReadLine().Split(',');
Name cl = new Name();
try
{
cl.Name= value[0].Trim('"');
cl.Age= value[1].Trim('"');
cl.Height= value[2].Trim('"');
new Data().addPerson(cl);
}
答案 0 :(得分:0)
这是一个快速的&脏的解决方案我一起做了标记。使用正则表达式可能会有更优雅的解决方案。但是嘿,它有效......
using System.Text;
var line = "\"Mark, Fenech\", \"20\", \"170\"";
public static string RemoveColumnDelimitersInsideValues(string input) {
const char valueDelimiter = '"';
const char columnDelimiter = ',';
StringBuilder output = new StringBuilder();
bool isInsideValue = false;
for (var i = 0; i < input.Length; i++) {
var currentChar = input[i];
if (currentChar == valueDelimiter) {
isInsideValue = !isInsideValue;
output.Append(currentChar);
continue;
}
if (currentChar != columnDelimiter || !isInsideValue) {
output.Append(currentChar);
}
// else ignore columnDelimiter inside value
}
return output.ToString();
}