[英]save txt data files to array function in c#
我创建了一个绘制数据的函数:
public void ShowGraphData(long lTotalData)
{
double[] dx = new double[lTotalData];
double[] dy = new double[lTotalData];
for (long li = 0; li < lTotalData; li++)
{
dx[li] = GlobalDataClass.dDataArray[li, 0];
dy[li] = GlobalDataClass.dDataArray[li, 1];
}
zedGraphControlStickiness.GraphPane.CurveList.Clear();
GraphPane StickinessPane = zedGraphControlStickiness.GraphPane;
// PointPairList holds the data for plotting, X and Y arrays
PointPairList spl1 = new PointPairList(dx, dy);
// Add cruves to myPane object
LineItem ProductionCurve = StickinessPane.AddCurve("Insertion Force", spl1, Color.Blue, SymbolType.None);
ProductionCurve.Line.Width = 2.0F;
zedGraphControlStickiness.AxisChange();
zedGraphControlStickiness.Invalidate();
zedGraphControlStickiness.Refresh();
GlobalDataClass.iTotalReadingPoint = lTotalData;
}
然后,我使用filestream打开txt文件:
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
//save data to list array.
}
}
我需要加载txt并将包含几行的数据保存为Showgraph函数的lToTalData中的数组。 我的文本文件是这样的:
10,20
20,30
30,40
40,50
50,60
有人可以帮我怎么做吗?
采用
List<string> _lineValues = File.ReadLines(@"File Path").ToList();
要么
List<string> _lineValues = File.ReadAllLines(@"File Path").ToList();
问题全在于文件数据在适当数组中的转换。 如果您不知道输入文件中值的确切数量,最好的方法是使用List<double>
而不是固定长度的数组
List<double> dx = new List<double>();
List<double> dy = new List<double>();
if(DialogResult.OK == openFileDialog1.ShowDialog())
{
int x = 1;
if(openFileDialog1.FileName != string.Empty)
{
CultureInfo ci = CultureInfo.InvariantCulture;
// Load everything in an IEnumerable of strings
var lines = File.ReadLines(openFileDialog1.FileName);
// start the enumeration
foreach(string s in lines)
{
double temp;
// If on even line put the value in the dy list
if((x % 2) == 0)
{
if(double.TryParse(s, NumberStyles.Any, ci, out temp))
dy.Add(temp);
}
else
{
// on odd line put in the dx list
if(double.TryParse(s, NumberStyles.Any, ci, out temp))
dx.Add(temp);
}
x++;
}
}
}
最后,您有两个双打列表。 使用列表而不是数组应该是一个更好的选择,并且可以轻松替换(您可以将列表索引为数组,但是在需要添加新值时具有更好的功能)。 如果您确实需要使用数组,可以随时编写
PointPairList spl1 = new PointPairList(dx.ToArray(), dy.ToArray());
但是,需要进行一些错误检查,例如,如果您的一行中的一行不能转换为双精度值,该怎么办。
据我正确理解,你想要一个双数组吗? 那么您应该尝试这样的事情:
但请注意,如果代码中的一行不能转换为双精度,则此示例将引发错误
double[] _array = File.ReadAllLines("path").Select(v => double.Parse(v)).ToArray();
抱歉,但要弄清楚,(长lTotalData)实际上是文本文件中的行数。 因此该函数将获取行数。 所以代码:
double[] dx = new double[lTotalData];
double[] dy = new double[lTotalData];
for (long li = 0; li < lTotalData; li++)
{
dx[li] = GlobalDataClass.dDataArray[li, 0];
dy[li] = GlobalDataClass.dDataArray[li, 1];
}
它将循环该行并将每一行存储在数组dx [li],d [li]中。 考虑一下txt中的数据是这样的:
X,Y
X,Y
X,Y
X,Y
现在我只想知道如何将行数传递给函数,并让函数循环行以将值存储在dx,dy数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.