繁体   English   中英

将txt数据文件保存到C#中的数组函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM