有没有一种简单的方法可以将字符串从csv格式转换为字符串[]或列表?
我可以保证数据中没有逗号。
答案 0 :(得分:17)
String.Split不会削减它,但Regex.Split可能 - 试试这个:
using System.Text.RegularExpressions;
string[] line;
line = Regex.Split( input, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
'input'是csv行。这将处理带引号的分隔符,并且应该返回一个表示行中每个字段的字符串数组。
答案 1 :(得分:8)
如果您需要强大的CSV处理功能,请查看FileHelpers
答案 2 :(得分:2)
string[] splitString = origString.Split(',');
(以下评论未被原始回答者添加) 请注意,此答案针对的是SPECIFIC案例中保证数据中没有逗号。
答案 3 :(得分:2)
您可以查看将Microsoft.VisualBasic程序集与
一起使用Microsoft.VisualBasic.FileIO.TextFieldParser
它使用引号处理CSV(或任何分隔符)。我最近发现它非常方便。
答案 4 :(得分:2)
尝试:
Regex rex = new Regex(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
string[] values = rex.Split( csvLine );
来源:http://weblogs.asp.net/prieck/archive/2004/01/16/59457.aspx
答案 5 :(得分:1)
如果您想要使用嵌入式逗号的引用元素,尤其是如果它们与非引用字段混合,则没有一种简单的方法可以做到这一点。
您可能还希望将这些行转换为字典,并按列名称键入。
我这样做的代码是几百行。
我认为网络上有一些例子,开源项目等等。
答案 6 :(得分:1)
试试这个;
static IEnumerable<string> CsvParse(string input)
{
// null strings return a one-element enumeration containing null.
if (input == null)
{
yield return null;
yield break;
}
// we will 'eat' bits of the string until it's gone.
String remaining = input;
while (remaining.Length > 0)
{
if (remaining.StartsWith("\"")) // deal with quotes
{
remaining = remaining.Substring(1); // pass over the initial quote.
// find the end quote.
int endQuotePosition = remaining.IndexOf("\"");
switch (endQuotePosition)
{
case -1:
// unclosed quote.
throw new ArgumentOutOfRangeException("Unclosed quote");
case 0:
// the empty quote
yield return "";
remaining = remaining.Substring(2);
break;
default:
string quote = remaining.Substring(0, endQuotePosition).Trim();
remaining = remaining.Substring(endQuotePosition + 1);
yield return quote;
break;
}
}
else // deal with commas
{
int nextComma = remaining.IndexOf(",");
switch (nextComma)
{
case -1:
// no more commas -- read to end
yield return remaining.Trim();
yield break;
case 0:
// the empty cell
yield return "";
remaining = remaining.Substring(1);
break;
default:
// get everything until next comma
string cell = remaining.Substring(0, nextComma).Trim();
remaining = remaining.Substring(nextComma + 1);
yield return cell;
break;
}
}
}
}
答案 7 :(得分:0)
string[] splitStrings = myCsv.Split(",".ToCharArray());
答案 8 :(得分:0)
CsvString.split(',');
答案 9 :(得分:0)
separationChar[] = {';'}; // or '\t' ',' etc.
var strArray = strCSV.Split(separationChar);
答案 10 :(得分:0)
某些CSV文件的值带有双引号和逗号。因此,有时您可以拆分此字符串文字:“,”
答案 11 :(得分:0)
带引号字段的Csv文件不是Csv文件。当您在另存为中选择“Csv”时,更多的东西(Excel)输出没有引号而不是引号。
如果你想要一个你可以使用,免费或提交的,这里也是我的IDataReader / Record。它还使用DataTable来定义/转换/强制列和DbNull。
http://github.com/claco/csvdatareader/
它没有引用..但是。几天前我就把它扔在一起刮伤了它。
被遗忘的分号:很好的链接。谢谢。 cfeduke:感谢您向Microsoft.VisualBasic.FileIO.TextFieldParser提示。今晚进入CsvDataReader。
答案 12 :(得分:0)
string s = "1,2,3,4,5";
string myStrings[] = s.Split({','}};
请注意,Split()会将数组字符拆分。
答案 13 :(得分:0)
string test = "one,two,three";
string[] okNow = test.Split(',');
答案 14 :(得分:0)
获取所有行的字符串[]:
string[] lines = System.IO.File.ReadAllLines("yourfile.csv");
然后循环并拆分这些行(这容易出错,因为它不会在引号分隔的字段中检查逗号):
foreach (string line in lines)
{
string[] items = line.Split({','}};
}
答案 15 :(得分:0)
http://github.com/claco/csvdatareader/。
除了暴露分隔符/修剪空间/类型ig之外,只需要几个道具,你只需要窃取代码。
答案 16 :(得分:0)
我已经拆分了标签,所以这对我有所帮助:
public static string CsvToTabDelimited(string line) {
var ret = new StringBuilder(line.Length);
bool inQuotes = false;
for (int idx = 0; idx < line.Length; idx++) {
if (line[idx] == '"') {
inQuotes = !inQuotes;
} else {
if (line[idx] == ',') {
ret.Append(inQuotes ? ',' : '\t');
} else {
ret.Append(line[idx]);
}
}
}
return ret.ToString();
}