我想使用C#将一些数据写入CSV文件。
这是我目前的代码:
int length = readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;
List<List<string>> dataList = new List<List<string>>();
foreach (string line in readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> partsLine = new List<string>();
partsLine.AddRange(line.Split('\t'));
dataList.Add(partsLine);
}
所以,我将所有数据分成行。
然后我用'\ t'分隔符拆分每一行,并在列表中添加该行的每一部分。
最后,我有一个包含所有分割线列表的列表。
所以列表如下:
所有列表都没有您所见的相同长度。
我想要做的是将所有列表都写入CSV文件。
每个列表将填充一行和一定数量的列,具体取决于列表的长度(即txt1应为(row1,col1),txt2应为(row1,col2),txt3应为(row2,col1) ),txt4将是(row2,col2)...)。
我该怎么做?
由于
答案 0 :(得分:2)
List<List<String>> dataList = new List<List<string>>();
//...
const char SEPARATOR = ",";
using (StreamWriter writer = new StreamWriter("file.csv"))
{
dataList.ForEach(line =>
{
var lineArray = line.Select(c =>
c.Contains(SEPARATOR) ? c.Replace(SEPARATOR.ToString(), "\\" + SEPARATOR) : c).ToArray();
writer.WriteLine(string.Join(SEPARATOR, lineArray));
});
}
答案 1 :(得分:1)
CSV
格式本身并不打算使用具有可变列长度的行进行格式化。
CSV
(逗号分隔值)只是“表格式”格式,因此如果要遵循其约定,则必须首先定义所有可能的列并逐行填充行,因此几行中有多个单元格将保持空虚。
如果这不是您想要的,只需选择您的自定义格式。
答案 2 :(得分:0)
我回到这个主题是因为我意识到.csv格式不适合我的需要。
我需要使用我拥有的所有数据绘制一些图表,并且我读到.csv文件不支持图表集成。因此,我不想将List<List<string>>
导出到.csv,而是将其导出为.xls文件。
我尝试通过在StreamWriter参数中将文件类型更改为.xls来尝试,但数据不像.csv中那样。我应该在代码中更改什么?
// Write data to a .csv file
private void WriteToCSV(string data)
{
int length = data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;
// List of lists containing each line split by part
List<List<string>> dataList = new List<List<string>>();
List<string> valuesA = new List<string>();
// Building the list
foreach (string line in data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> partsLine = new List<string>();
partsLine.AddRange(line.Split('\t'));
dataList.Add(partsLine);
}
const string separator = ";";
// Writing the list to the .csv file
try
{
using (StreamWriter writer = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\output.xls", false))
{
dataList.ForEach(line =>
{
var lineArray = line.Select(c => c.Contains(separator) ? c.Replace(separator.ToString(), "\\" + separator) : c).ToArray();
writer.WriteLine(string.Join(separator, lineArray));
});
}
}
catch (Exception ex)
{
Console.WriteLine("Error while writing data to .csv file (" + ex.Message + ")");
}
在图片上,您可以看到以前的格式(右侧为.csv)和新格式(左侧为.xls)。 http://imageshack.us/photo/my-images/850/cax.png/