我正在使用分割逗号分隔的CSV文件 这段代码如下。它工作正常,但有些记录在 即使保留逗号,该文件也包含数据中的逗号 作为分隔符。例如,记录包含用户的描述文本 已输入逗号,我的脚本输入就像记录结束一样。 我怎么能以某种方式克服它?
以下是我的CSV文件中的一行示例。请注意行末尾的空记录可以是“”括号中的字符:
“1”,“34353434”,“亚当”,“Traxx”,“343”,“这个人是老板,请妥善处理”,“”,,“”,“”,,“,” “ ”0“ ,,”
这是我阅读和分割的方式:
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
有人可以帮忙吗?也许这只是一个我看不到的简单解决方案: - )
答案 0 :(得分:6)
使用正确的CSV解析器 - File Helpers是一种受欢迎的选项。
还有一个来自Microsoft的解析器 - Microsoft.VisualBasic.FileIO
命名空间中的TextFieldParser
。
这些涉及CSV的细微方面,大多数手动解决方案在遇到问题之前都不会考虑。
答案 1 :(得分:0)
你的例子可能不正确
句子后面的最后一部分说:"",,"","",,","","0",,"
有两个基本条件:
x,y
,分隔符是逗号,则以CSV格式获取"x,y"
)They say "Hey!"
获得"They say ""Hey!"""
)键入时会保存其他字符串。
并且您不能使用此规则转移您的最后一部分。 尝试将逗号更改为分号并导入Excel。 Excel将按如下方式显示您的示例:
在我的国家/地区是标准的CSV分隔符分号。
我编写这段代码来解析CSV。您可以尝试根据您的目的修改它(分隔符是可变的):
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;
}