将二维c#数组的内容存储到csv文件中
我有一个C#数组,我希望从中获取每个元素并将其存储在每个csv单元格中。我编写了以下内容:将二维c#数组的内容存储到csv文件中,c#,arrays,csv,multidimensional-array,C#,Arrays,Csv,Multidimensional Array,我有一个C#数组,我希望从中获取每个元素并将其存储在每个csv单元格中。我编写了以下内容: StreamWriter file = new StreamWriter("C:/mylocation/data.csv"); //my2darray is my 2d array created. for (int i = 0; i < my2darray.GetLength(1); i++) { for (int j=0; j<my2darray.GetLe
StreamWriter file = new StreamWriter("C:/mylocation/data.csv");
//my2darray is my 2d array created.
for (int i = 0; i < my2darray.GetLength(1); i++)
{
for (int j=0; j<my2darray.GetLength(0);j++)
{
file.Write(my2darray[i][j]);
file.Write("\t");
}
file.Write("\n"); // go to next line
}
StreamWriter file=newstreamwriter(“C:/mylocation/data.csv”);
//my2darray是我创建的2d数组。
for(int i=0;i 对于(int j=0;j它可以工作。您可能没有使用正确的分隔符。请尝试使用换行符“\r\n”,并使用csv分隔符,如“,”我将按如下方式编写循环:
var my2darray = new[,]
{
{ true, false, false, true },
{ true, false, false, true },
{ true, false, false, true },
{ true, false, false, true },
{ true, false, false, true },
};
var iLength = my2darray.GetLength(1);
var jLength = my2darray.GetLength(0);
for (int i = 0; i < iLength; i++)
{
for (int j = 0; j < jLength; j++)
{
file.Write("{0}\t", my2darray[j, i]);
}
file.WriteLine();
}
var my2darray=new[,]
{
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
};
var iLength=my2darray.GetLength(1);
var jLength=my2darray.GetLength(0);
对于(int i=0;i
请注意,当您使用my2darray.GetLength(x)时,数组的类型是arr[,],而不是arr[]
还请注意,如果要在csv文件中转置矩阵,则必须更改i和y:my2darray[j,i]
锯齿形的版本可能是这样的(预计j维i在整个外部数组(i维)中相等):
var my2darray=new[]
{
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
};
var iLength=my2darray.Length;
var jLength=my2darray[0]。长度;
对于(int j=0;j
我得到了一个解决方案,并根据@adv12的提示进行了以下轻微修改
StreamWriter file = new StreamWriter("C:/mylocation/data.csv");
//my2darray is my 2d array created.
for (int i = 0; i < my2darray.GetLength(1); i++)
{
for (int j=0; j<my2darray.GetLength(0);j++)
{
file.Write(my2darray[i,j]);
//it is comman and not a tab
file.Write(",");
}
//go to next line
file.Write("\n");
}
StreamWriter file=newstreamwriter(“C:/mylocation/data.csv”);
//my2darray是我创建的2d数组。
for(int i=0;i 对于(int j=0;j我宁愿将CSV表示和保存分开:
private static IEnumerable<String> ToCsv<T>(T[,] data, string separator = ",") {
for (int i = 0; i < data.GetLength(0); ++i)
yield return string.Join(separator, Enumerable
.Range(0, data.GetLength(1))
.Select(j => data[i, j])); // simplest, we don't expect ',' and '"' in the items
}
您用来查看文件的应用程序是否接受制表符作为分隔符?通常CSV文件使用逗号。(毕竟是“逗号分隔值”)。此外,如果您在Windows上,您可能需要\r\n
(Windows行结束)而不仅仅是\n
。要正确地进行行尾处理,而不考虑平台,您可以使用环境.NewLine
。既然您使用j来迭代数组的第二维度,那么它不应该是my2darray.GetLength(1)在for语句中?还有,什么类型是my2darray?这是字符串数组吗?如果是,请确保在字符串周围加引号(如果字符串可以包含分隔符),然后确保正确转义它们包含的任何引号。如果使用Excel查看结果,可以在导入向导中显式选择分隔符。A另外,my2darray
是一个矩形数组吗?这就是使用GetLength(0)
和GetLength(1)
所暗示的,但是你访问它的内容就像它是一个锯齿数组一样(my2darray[i][j]
而不是my2darray[i,j]
)。此外,我同意@Kevin的观点,即您似乎对数组索引器的顺序不一致。由于StreamWriter
实现了IDisposable
(并因此分配资源),请使用:使用(StreamWriter file=new StreamWriter(“C:/mylocation/data.csv”)将其包装成{…/*您的代码在这里*/…}
private static IEnumerable<String> ToCsv<T>(T[,] data, string separator = ",") {
for (int i = 0; i < data.GetLength(0); ++i)
yield return string.Join(separator, Enumerable
.Range(0, data.GetLength(1))
.Select(j => data[i, j])); // simplest, we don't expect ',' and '"' in the items
}
File.WriteAllLines(@"C:/mylocation/data.csv",
ToCsv(my2array));