2014-02-14 69 views
0

我创建了一个函数来绘制数据:保存在C#中的txt数据文件到阵列功能

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

可有一个人帮我,我该怎么办这个?

+1

如果您想要将数据保存到文件中或想要从文件加载数据,能否更好地解释? – Steve

+0

对不起,但我想加载数据。 – Ren

回答

2

使用

List<string> _lineValues = File.ReadLines(@"File Path").ToList(); 

List<string> _lineValues = File.ReadAllLines(@"File Path").ToList(); 
+0

对不起,但这是创建一个列表仪式?现在我想加载数据包含几行并将其保存到数组(lTotalData),如我的代码。 – Ren

1

的问题是所有在适当的阵列中的文件数据的转换。如果你不知道输入文件值的确切数量,你最好的办法是使用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()); 

然而,需要一些错误检查,比如做什么,如果您的一条线路是不能转换为双精度值。

1

正如我理解正确,你想要一个双数组? 那么你应该尝试这样的事:

但要注意,如果在你的代码行不能转换为双,这个例子会抛出一个错误

double[] _array = File.ReadAllLines("path").Select(v => double.Parse(v)).ToArray(); 
0

很抱歉,但要清楚,(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]; 

} 

它会循环行并将每行存储在数组dx [li],d [li]中。考虑数据的TXT是这样的:

X,Y
X,Y
X,Y
X,Y

现在我只是想知道如何行数传递给函数并让函数循环行以获取dx,dy数组中的值存储。

相关问题