拆分前检查并删除 csv 文件中的逗号
Check and remove comma from csv file before splitting
我正在尝试读取某个 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);
}
这是我拼凑的一个快速而肮脏的解决方案。使用正则表达式可能有更优雅的解决方案。但是,嘿,它有效...
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();
}
我正在尝试读取某个 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);
}
这是我拼凑的一个快速而肮脏的解决方案。使用正则表达式可能有更优雅的解决方案。但是,嘿,它有效...
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();
}