C# 使用内联逗号拆分逗号分隔的csv文件
我正在使用拆分逗号分隔的CSV文件 此代码如下所示。它很好用,但有些唱片 该文件在数据中包含逗号,即使逗号是保留的 作为分隔符。例如,记录包含一个描述文本,其中用户 已输入逗号,并且我的脚本输入了与记录结尾类似的前缀。 我怎么才能克服呢 下面是我的CSV文件中的一行示例。请注意,行尾的空记录可以不带“”封闭字符: “1”、“34353434”、“亚当”、“特拉克斯”、“343”、“这个人是老板,请尊重地处理”、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、” 以下是我阅读和拆分的方式:C# 使用内联逗号拆分逗号分隔的csv文件,c#,asp.net,vb.net,csv,.net,C#,Asp.net,Vb.net,Csv,.net,我正在使用拆分逗号分隔的CSV文件 此代码如下所示。它很好用,但有些唱片 该文件在数据中包含逗号,即使逗号是保留的 作为分隔符。例如,记录包含一个描述文本,其中用户 已输入逗号,并且我的脚本输入了与记录结尾类似的前缀。 我怎么才能克服呢 下面是我的CSV文件中的一行示例。请注意,行尾的空记录可以不带“”封闭字符: “1”、“34353434”、“亚当”、“特拉克斯”、“343”、“这个人是老板,请尊重地处理”、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、” 以下是我阅读和
Sub ReadOnlineExample()
Dim line_read As String
Dim tempfilename As String
Dim i As Integer
Dim rows_skipped As Integer
Dim line_split(0 To 125) As String
Dim MortalityRates(0 To 125) As Double
tempfilename = "C:\MortalityRateTable.csv"
Dim sr As New System.IO.StreamReader(tempfilename)
'Split the line into individual data
line_split = line_read.Split(",")
'Save the split data into an array
For i = 0 To UBound(line_split)
MortalityRates(i) = line_split(i)
Next i
End Sub
有人能帮忙吗?也许这只是一个我看不到的简单解决方案:-)使用合适的CSV解析器-是一个流行的选择
还有一个来自Microsoft的解析器-在Microsoft.VisualBasic.FileIO
名称空间中
这些处理了CSV的微妙方面,大多数手卷的解决方案直到遇到问题才考虑。
< P>使用适当的CSV解析器-是一个流行的选项。 还有一个来自Microsoft的解析器-在Microsoft.VisualBasic.FileIO
名称空间中
这些处理了CSV的微妙方面,大多数手卷的解决方案直到遇到问题才考虑。
你的例子可能不正确。 句子后面的最后一部分说:
有两个基本条件:
分隔符标记调用EncloseInt整个内部字符串来引用标记(如果您有x,y
,并且分隔符是逗号,在CSV中您会得到“x,y”
)
引号作为双引号转义(如果您有他们在CSV中说“嘿!”
,您会得到“他们说“嘿!”
)
其他字符串将在您键入时保存
你不能用这个规则转移你的最后一部分。
尝试将逗号改为分号并导入Excel。Excel显示您的示例,如下所示:
在我的国家是标准的CSV分隔符分号
我编写此代码用于解析CSV。您可以尝试根据自己的目的修改它(分隔符是可变的):
public List ParseCsvRow(字符分隔符,字符串输入)
{
列表结果=新列表();
字符串步长=”;
布尔逃逸=假;
StringBuilder StringBuilder=新的StringBuilder();
int位置=-1;
做
{
如果(++位置>=input.Length)
{
Add(stringBuilder.ToString());
stringBuilder=null;
打破
}
步骤=输入子串(位置1);
开关(步骤)
{
大小写“\”:
if(stringBuilder.Length==0&&!转义)
{
逃逸=真;
继续;
}
if(位置+1<输入长度)
步骤=输入。子字符串(++位置,1);
其他的
步骤=”;
如果(步骤==“\”)
{
stringBuilder.Append(“\”);
继续;
}
if(step.Equals(delimiter.ToString())&转义)
{
Add(stringBuilder.ToString());
stringBuilder.Clear();
逃逸=假;
继续;
}
打破
违约:
if(step.Equals(delimiter.ToString())&&&!转义)
{
Add(stringBuilder.ToString());
stringBuilder.Clear();
继续;
}
stringBuilder.Append(步骤);
继续;
}
}虽然(正确);
返回结果;
}
您的示例可能不正确。
句子后面的最后一部分说:
有两个基本条件:
分隔符标记调用EncloseInt整个内部字符串来引用标记(如果您有x,y
,并且分隔符是逗号,在CSV中您会得到“x,y”
)
引号作为双引号转义(如果您有他们在CSV中说“嘿!”
,您会得到“他们说“嘿!”
)
其他字符串将在您键入时保存
你不能用这个规则转移你的最后一部分。
尝试将逗号更改为分号并导入Excel。Excel将显示以下示例:
在我的国家,是标准的CSV分隔符分号。
我编写此代码是为了解析CSV。您可以尝试根据自己的目的修改它(分隔符是可变的):
public List ParseCsvRow(字符分隔符,字符串输入)
{
列表结果=新列表();
字符串步长=”;
布尔逃逸=假;
StringBuilder StringBuilder=新的StringBuilder();
int位置=-1;
做
{
如果(++位置>=input.Length)
{
Add(stringBuilder.ToString());
stringBuilder=null;
打破
}
步骤=输入子串(位置1);
开关(步骤)
{
大小写“\”:
if(stringBuilder.Length==0&&!转义)
{
逃逸=真;
继续;
}
if(位置+1<输入长度)
步骤=输入。子字符串(++位置,1);
其他的
步骤=”;
如果(步骤==“\”)
{
stringBuilder.Append(“\”);
继续;
public List<string> ParseCsvRow(char delimiter, string input)
{
List<string> result = new List<string>();
string step = "";
bool escaped = false;
StringBuilder stringBuilder = new StringBuilder();
int position = -1;
do
{
if (++position >= input.Length)
{
result.Add(stringBuilder.ToString());
stringBuilder = null;
break;
}
step = input.Substring(position, 1);
switch (step)
{
case "\"":
if (stringBuilder.Length == 0 && !escaped)
{
escaped = true;
continue;
}
if (position + 1 < input.Length)
step = input.Substring(++position, 1);
else
step = "";
if (step == "\"")
{
stringBuilder.Append("\"");
continue;
}
if (step.Equals(delimiter.ToString()) && escaped)
{
result.Add(stringBuilder.ToString());
stringBuilder.Clear();
escaped = false;
continue;
}
break;
default:
if (step.Equals(delimiter.ToString()) && !escaped)
{
result.Add(stringBuilder.ToString());
stringBuilder.Clear();
continue;
}
stringBuilder.Append(step);
continue;
}
} while (true);
return result;
}