C# 从字符串[][]生成CSV文件
我有一个MVC控制器,它应该从C# 从字符串[][]生成CSV文件,c#,file,csv,C#,File,Csv,我有一个MVC控制器,它应该从字符串[]返回一个CSV文件。我正在尝试这个例子: public FileContentResult DownloadCSV() { string[][] output = new string[][]{ new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"}, new string[]{"Col1 Row 2", "Col2 Row 2",
字符串[]
返回一个CSV文件。我正在尝试这个例子:
public FileContentResult DownloadCSV()
{
string[][] output = new string[][]{
new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},
new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}
};
return File(output, "text/csv", "Report123.csv");
}
但我不知道如何创建文件。如何从
string[][]
创建CSV文件?使用扩展名方法生成文件
编辑1
根据评论,执行以下操作可能更简单,也可能更快:
/// <summary>
/// Convert an array to a csv row, of the form "1,2,3,4.."
/// </summary>
/// <typeparam name="T">The array type</typeparam>
/// <param name="list">The array</param>
/// <returns>A comma delimited string</returns>
public static string ToCSVRow<T>(this T[] list)
{
return string.Join(",", list);
}
/// <summary>
/// Convert a jagged array to csv table, where each row has the form "1,2,3,.."
/// </summary>
/// <param name="array">The array of numbers</param>
/// <returns>A string value</returns>
public static string ToCSV<T>(this T[][] array)
{
return string.Join(Environment.NewLine, array.Select((row) => string.Join(",", row)));
}
//
///将数组转换为csv行,格式为“1,2,3,4..”
///
///数组类型
///阵列
///逗号分隔的字符串
公共静态字符串ToCSVRow(此T[]列表)
{
返回字符串。Join(“,”列表);
}
///
///将锯齿状数组转换为csv表,其中每行的格式为“1,2,3,…”
///
///数列
///字符串值
公共静态字符串ToCSV(此T[][]数组)
{
返回string.Join(Environment.NewLine,array.Select((行)=>string.Join(“,”行));
}
使用扩展名方法生成文件
编辑1
根据评论,执行以下操作可能更简单,也可能更快:
/// <summary>
/// Convert an array to a csv row, of the form "1,2,3,4.."
/// </summary>
/// <typeparam name="T">The array type</typeparam>
/// <param name="list">The array</param>
/// <returns>A comma delimited string</returns>
public static string ToCSVRow<T>(this T[] list)
{
return string.Join(",", list);
}
/// <summary>
/// Convert a jagged array to csv table, where each row has the form "1,2,3,.."
/// </summary>
/// <param name="array">The array of numbers</param>
/// <returns>A string value</returns>
public static string ToCSV<T>(this T[][] array)
{
return string.Join(Environment.NewLine, array.Select((row) => string.Join(",", row)));
}
//
///将数组转换为csv行,格式为“1,2,3,4..”
///
///数组类型
///阵列
///逗号分隔的字符串
公共静态字符串ToCSVRow(此T[]列表)
{
返回字符串。Join(“,”列表);
}
///
///将锯齿状数组转换为csv表,其中每行的格式为“1,2,3,…”
///
///数列
///字符串值
公共静态字符串ToCSV(此T[][]数组)
{
返回string.Join(Environment.NewLine,array.Select((行)=>string.Join(“,”行));
}
使用扩展名方法生成文件
编辑1
根据评论,执行以下操作可能更简单,也可能更快:
/// <summary>
/// Convert an array to a csv row, of the form "1,2,3,4.."
/// </summary>
/// <typeparam name="T">The array type</typeparam>
/// <param name="list">The array</param>
/// <returns>A comma delimited string</returns>
public static string ToCSVRow<T>(this T[] list)
{
return string.Join(",", list);
}
/// <summary>
/// Convert a jagged array to csv table, where each row has the form "1,2,3,.."
/// </summary>
/// <param name="array">The array of numbers</param>
/// <returns>A string value</returns>
public static string ToCSV<T>(this T[][] array)
{
return string.Join(Environment.NewLine, array.Select((row) => string.Join(",", row)));
}
//
///将数组转换为csv行,格式为“1,2,3,4..”
///
///数组类型
///阵列
///逗号分隔的字符串
公共静态字符串ToCSVRow(此T[]列表)
{
返回字符串。Join(“,”列表);
}
///
///将锯齿状数组转换为csv表,其中每行的格式为“1,2,3,…”
///
///数列
///字符串值
公共静态字符串ToCSV(此T[][]数组)
{
返回string.Join(Environment.NewLine,array.Select((行)=>string.Join(“,”行));
}
使用扩展名方法生成文件
编辑1
根据评论,执行以下操作可能更简单,也可能更快:
/// <summary>
/// Convert an array to a csv row, of the form "1,2,3,4.."
/// </summary>
/// <typeparam name="T">The array type</typeparam>
/// <param name="list">The array</param>
/// <returns>A comma delimited string</returns>
public static string ToCSVRow<T>(this T[] list)
{
return string.Join(",", list);
}
/// <summary>
/// Convert a jagged array to csv table, where each row has the form "1,2,3,.."
/// </summary>
/// <param name="array">The array of numbers</param>
/// <returns>A string value</returns>
public static string ToCSV<T>(this T[][] array)
{
return string.Join(Environment.NewLine, array.Select((row) => string.Join(",", row)));
}
//
///将数组转换为csv行,格式为“1,2,3,4..”
///
///数组类型
///阵列
///逗号分隔的字符串
公共静态字符串ToCSVRow(此T[]列表)
{
返回字符串。Join(“,”列表);
}
///
///将锯齿状数组转换为csv表,其中每行的格式为“1,2,3,…”
///
///数列
///字符串值
公共静态字符串ToCSV(此T[][]数组)
{
返回string.Join(Environment.NewLine,array.Select((行)=>string.Join(“,”行));
}
这是一个使用LINQ的示例
public FileContentResult DownloadCSV()
{
string[][] output = new string[][]{
new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},
new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}
};
var result = lines.Select(l=>string.Join(",", l))
.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v))
.ToString();
return File(result, "text/csv", "Report123.csv");
}
。。。作为一种扩展方法
public static class ToolsEx
{
public static string ToCsvString(this string[][] lines)
{
var query = lines.Select(l=>string.Join(",", l));
var result = query.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v));
return result.ToString();
}
}
。。。记住string.Join
使用StringBuilder internal后,您可以进一步简化它(如果其他人在您之后维护它,这可能会有点太多)
下面是一个使用LINQ的示例
public FileContentResult DownloadCSV()
{
string[][] output = new string[][]{
new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},
new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}
};
var result = lines.Select(l=>string.Join(",", l))
.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v))
.ToString();
return File(result, "text/csv", "Report123.csv");
}
。。。作为一种扩展方法
public static class ToolsEx
{
public static string ToCsvString(this string[][] lines)
{
var query = lines.Select(l=>string.Join(",", l));
var result = query.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v));
return result.ToString();
}
}
。。。记住string.Join
使用StringBuilder internal后,您可以进一步简化它(如果其他人在您之后维护它,这可能会有点太多)
下面是一个使用LINQ的示例
public FileContentResult DownloadCSV()
{
string[][] output = new string[][]{
new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},
new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}
};
var result = lines.Select(l=>string.Join(",", l))
.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v))
.ToString();
return File(result, "text/csv", "Report123.csv");
}
。。。作为一种扩展方法
public static class ToolsEx
{
public static string ToCsvString(this string[][] lines)
{
var query = lines.Select(l=>string.Join(",", l));
var result = query.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v));
return result.ToString();
}
}
。。。记住string.Join
使用StringBuilder internal后,您可以进一步简化它(如果其他人在您之后维护它,这可能会有点太多)
下面是一个使用LINQ的示例
public FileContentResult DownloadCSV()
{
string[][] output = new string[][]{
new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},
new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}
};
var result = lines.Select(l=>string.Join(",", l))
.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v))
.ToString();
return File(result, "text/csv", "Report123.csv");
}
。。。作为一种扩展方法
public static class ToolsEx
{
public static string ToCsvString(this string[][] lines)
{
var query = lines.Select(l=>string.Join(",", l));
var result = query.Aggregate(new StringBuilder(), (sb, v) => sb.AppendLine(v));
return result.ToString();
}
}
。。。记住string.Join
使用StringBuilder internal后,您可以进一步简化它(如果其他人在您之后维护它,这可能会有点太多)
你被困在哪一部分?打开/创建文件?创建逗号分隔列表?写入文件?在返回文件中,我不知道如何创建文件文件内容应该是
字节[]
,而不是字符串[][]
。查找如何将字符串转换为字节数组。File.writeAllines(“Report123.csv”,output.Select(inner=>string.Join(“,”,inner))代码>需要考虑转义字符。我不建议尝试制作您自己的csv。有很多可用的免费工具,这将给你很大的灵活性和速度,以及在角落的情况下,你可能不考虑的鲁棒性。nuget提供的CSVHelper是一个很好的资源。这是一个到规格的链接。你粘在哪个零件上?打开/创建文件?创建逗号分隔列表?写入文件?在返回文件中,我不知道如何创建文件文件内容应该是字节[]
,而不是字符串[][]
。查找如何将字符串转换为字节数组。File.writeAllines(“Report123.csv”,output.Select(inner=>string.Join(“,”,inner))代码>需要考虑转义字符。我不建议尝试制作您自己的csv。有很多可用的免费工具,这将给你很大的灵活性和速度,以及在角落的情况下,你可能不考虑的鲁棒性。nuget提供的CSVHelper是一个很好的资源。这是一个到规格的链接。你粘在哪个零件上?打开/创建文件?创建逗号分隔列表?写入文件?在返回文件中,我不知道如何创建