【问题标题】:save txt data files to array function in c#将txt数据文件保存到c#中的数组函数
【发布时间】:2014-02-14 07:58:34
【问题描述】:

我创建了一个绘制数据的函数:

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.
     }
}

我需要在 Showgraph 函数的 lToTalData 中加载 txt 并将包含几行的数据保存为数组。 我的文本文件是这样的:


10,20
20,30
30,40
40,50
50,60

有人可以帮我怎么做吗?

【问题讨论】:

  • 如果您想将数据保存在文件中或者您想从文件中加载数据,您能更好地解释一下吗?
  • 抱歉,我想加载数据。

标签: c# arrays filestream


【解决方案1】:

使用

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

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

【讨论】:

  • 抱歉,这是为了创建一个列表仪式?现在我想加载包含多行的数据并将其保存到我的代码中的数组 (lTotalData) 中。
【解决方案2】:

问题在于正确数组中文件数据的转换。如果您不知道输入文件中值的确切数量,最好的方法是使用List&lt;double&gt; 而不是固定长度的数组

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());

但是,需要进行一些错误检查,例如,如果您的某一行不能转换为双精度值,该怎么办。

【讨论】:

    【解决方案3】:

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

    但请注意,如果您的代码中的一行无法转换为双精度,则此示例将引发错误

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

    【讨论】:

      【解决方案4】:

      抱歉,为了清楚起见,(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 数组中的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        相关资源
        最近更新 更多