我的文本文件由以下数据组成:
1,2
2,3
3,4
4,5
现在我想将数据保存到数组中。所以我做了分裂:
using (streamreader sr = new streamreader("file.txt")) {
string[] data = sr.ReadLine().Split(',');
}
但是我的数据保存在string []中,而我的GlobalDataClass
数组声明为double[,]
。像这样:
static class GlobalDataClass
{
public static double[,] Array = new double[4, 2];
}
我需要将数据分配给GlobalDataClass:
GlobalDataClass.Array = data;
所以我的问题是如何将string[]
转换为double[,]
?
答案 0 :(得分:3)
由于你有一个二维数组,你需要遍历每一行并提取值,然后将其分配到正确的位置。您可以使用Select
和double.Parse
将字符串值转换为double。
using (var reader = new StreamReader("file.txt"))
{
string line;
for (var count = 0; count < 4; ++count)
{
var data = reader.ReadLine()
.Split(',')
.Select(v => double.Parse(v))
.ToArray();
GlobalDataClass.Array[count,0] = data[0];
GlobalDataclass.Array[count,1] = data[1];
}
}
现在,如果你的数组真的是double[][]
,那么你可以做更多的事情:
GlobalDataClass.Array = File.ReadAllLines("file.txt")
.Select(l => l.Split(',')
.Select(v => double.Parse(v))
.ToArray())
.ToArray();
注意:我认为将它变成一个全局变量是一个非常糟糕的主意。可能有更好的方法来解决这个问题。
答案 1 :(得分:2)
我认为最好的方法是使用Array.ConvertAll。
示例:
string[] strs = new string[] { "1.00", "2.03" };
Array.ConvertAll(strs, Double.Parse);
答案 2 :(得分:2)
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
int counter =0 ;
while((line = file.ReadLine()) != null)
{
var lineData= line.Split(',');
GlobalDataClass.Array[counter,0] = double.Parse(lineData[0]);
GlobalDataClass.Array[counter,1] = double.Parse(lineData[1]);
counter++;
}
答案 3 :(得分:1)
如果行数可以变化:
var lines = File.ReadAllLines("file.txt");
var data = new double[lines.Length, 2];
for (var i = 0; i < lines.Length; i++)
{
var temp = lines[i].Split(',');
data[i,0] = double.Parse(temp[0]);
data[i,1] = double.Parse(temp[1]);
}
GlobalDataClass.Array = data;
..或者,如果行数是常数值:
using (var sr = new StreamReader("file.txt"))
{
var i = 0;
var len = GlobalDataClass.GetLength(0);
while (sr.Peak() >= 0 && i < len)
{
var temp = sr.ReadLine().Split(',');
GlobalDataClass.Array[i,0] = double.Parse(temp[0]);
GlobalDataClass.Array[i,1] = double.Parse(temp[1]);
i++;
}
}
答案 4 :(得分:1)
double[] doubleArray = strArray.Select(s => Double.Parse(s)).ToArray();
int k = 0;
for (int i = GlobalDataClass.Array.GetLowerBound(0); i <= GlobalDataClass.Array.GetUpperBound(0); i++)
{
for (int j = GlobalDataClass.Array.GetLowerBound(1); j <= GlobalDataClass.Array.GetUpperBound(1); j++)
{
double d = doubleArray[k];
GlobalDataClass.Array.SetValue(d, i, j);
k++;
}
}
答案 5 :(得分:1)
试试这个:
String [] words;
int lineCount=0;
String [] Lines=File.ReadAllLines(@"C:\Data.txt");
for (int i=0;i<Lines.Length;i++)
{
words = Lines[i].Split(',');
for (int j = 0; j < 2; j++)
{
GlobalDataClass.Array[i,j] = Convert.ToDouble(words[j].Trim());
}
}
答案 6 :(得分:1)
我正在使用您的部分代码向您展示如何执行此任务。
int mCount = 0;
using (streamreader sr = new streamreader("file.txt")) {
string[] data = sr.ReadLine().Split(',');
GlobalDataClass.Array[mCount , 0] = Double.Parse(data[0]);
GlobalDataClass.Array[mCount , 1] = Double.Parse(data[1]);
mCount += 1;
}