C#-从文本文件构建数组

C#-从文本文件构建数组,c#,arrays,file,streamreader,C#,Arrays,File,Streamreader,我试图从一个.txt文件中构建一个击球平均数数组,但我在网上找到的大多数帮助解决这个问题的资源都可以使用以下格式的文本: 123445 2 3 4 5 6 等等 。。。或采用以下格式: 1,2 3,4 等等 不幸的是,我的文本文件的格式如下,更改格式不是一个选项。每个奇数行号表示一名球员,以下偶数行号是他们在该情况下击球时的平均值(仅提供上下文信息): 一, 二, 三, 四, 使用此文件,我希望将奇数指定给数组的索引,然后将偶数填充为值,并在运行时进行计算。我相信我可以解析出如何完成计算,只是无

我试图从一个.txt文件中构建一个击球平均数数组,但我在网上找到的大多数帮助解决这个问题的资源都可以使用以下格式的文本:

123445

2 3 4 5 6

等等

。。。或采用以下格式:

1,2

3,4

等等

不幸的是,我的文本文件的格式如下,更改格式不是一个选项。每个奇数行号表示一名球员,以下偶数行号是他们在该情况下击球时的平均值(仅提供上下文信息):

一,

二,

三,

四,

使用此文件,我希望将奇数指定给数组的索引,然后将偶数填充为值,并在运行时进行计算。我相信我可以解析出如何完成计算,只是无法确定如何获取数据,也无法将奇数与数组索引关联起来

代码如下。文件由用户指定:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

static string FileName()
    {
        string doc = Console.ReadLine();
        return doc;
    }

static void Main(string[] args)
    {

        try
        {

            Console.Write("Where is the data file for batting averages located? ");
            string doc = FileName();
            StreamReader reader = new StreamReader(doc);
            string avg = reader.ReadToEnd();
            reader.Close();

        }
        catch (System.IO.FileNotFoundException) 
        {
            Console.WriteLine("The file can not be found.");
        }
        catch (System.FormatException)
        {
            Console.WriteLine("Invalid file.");
        }
        catch (System.ArgumentException)
        {
            Console.WriteLine("Enter a valid file name.");
        }
        catch (System.Exception exc)
        {
            Console.WriteLine(exc.Message);
        }
    }

欢迎提供任何援助。请记住,我是一名学生,仍在学习C#的最早部分,因此任何真正先进的技术都可能会在我身上消失。

您可以逐行读取文本文件(或使用System.IO.file.ReadAllLines-获取字符串[]-)。现在,可以根据您的意愿读取和处理奇偶索引


提示:您的文本文件格式基本且容易出错。

您可以逐行读取文本文件(或使用System.IO.file.ReadAllLines-获取字符串[]-)。现在,可以根据您的意愿读取和处理奇偶索引


提示:您的文本文件格式基本且容易出错。

您可以执行以下操作:

var lines = File.ReadAllLines(FileName());
for (int i = 0; i < lines.Length; i += 2)
{
    Console.WriteLine($"Player Name: {lines[i]}");
    Console.WriteLine($"Player Average: {lines[i + 1]}");
}
var lines=File.ReadAllLines(FileName());
对于(int i=0;i
您可以执行以下操作:

var lines = File.ReadAllLines(FileName());
for (int i = 0; i < lines.Length; i += 2)
{
    Console.WriteLine($"Player Name: {lines[i]}");
    Console.WriteLine($"Player Average: {lines[i + 1]}");
}
var lines=File.ReadAllLines(FileName());
对于(int i=0;i
昨天工作到深夜后,我想出了解决问题的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        Console.Write("Where is the data file for batting averages located? ");
        string doc = Console.ReadLine();

        int[] avg = new int[9];
        int val1=0, val2=0, val3=0, val4=0, val5=0, val6=0, val7=0, val8=0, val9=0;
        int cnt1=0, cnt2=0, cnt3=0, cnt4=0, cnt5=0, cnt6=0, cnt7=0, cnt8=0, cnt9=0;

        try
        {
            StreamReader reader = new StreamReader(doc);
            var lines = File.ReadAllLines(doc);
            int[] index = Array.ConvertAll(lines, int.Parse);
            //Console.WriteLine(lines); //displays contents of text file
            reader.Close();

            for (int i = 0;  i < index.Length; i += 2)
            {
                switch (index[i])
                {
                    case 1:
                        cnt1++;
                        val1 = val1 + index[i + 1];
                        break;
                    case 2:
                        cnt2++;
                        val2 = val2 + index[i + 1];
                        break;
                    case 3:
                        cnt3++;
                        val3 = val3 + index[i + 1];
                        break;
                    case 4:
                        cnt4++;
                        val4 = val4 + index[i + 1];
                        break;
                    case 5:
                        cnt5++;
                        val5 = val5 + index[i + 1];
                        break;
                    case 6:
                        cnt6++;
                        val6 = val6 + index[i + 1];
                        break;
                    case 7:
                        cnt7++;
                        val7 = val7 + index[i + 1];
                        break;
                    case 8:
                        cnt8++;
                        val8 = val8 + index[i + 1];
                        break;
                    case 9:
                        cnt9++;
                        val9 = val9 + index[i + 1];
                        break;
                    default:
                        break;
                }
            }
            int total = cnt1 + cnt2 + cnt3 + cnt4 + cnt5 + cnt6 + cnt7 + cnt8 + cnt9;
            decimal avg1 = Convert.ToDecimal(val1) / Convert.ToDecimal(cnt1);
            decimal avg2 = Convert.ToDecimal(val2) / Convert.ToDecimal(cnt2);
            decimal avg3 = Convert.ToDecimal(val3) / Convert.ToDecimal(cnt3);
            decimal avg4 = Convert.ToDecimal(val4) / Convert.ToDecimal(cnt4);
            decimal avg5 = Convert.ToDecimal(val5) / Convert.ToDecimal(cnt5);
            decimal avg6 = Convert.ToDecimal(val6) / Convert.ToDecimal(cnt6);
            decimal avg7 = Convert.ToDecimal(val7) / Convert.ToDecimal(cnt7);
            decimal avg8 = Convert.ToDecimal(val8) / Convert.ToDecimal(cnt8);
            decimal avg9 = Convert.ToDecimal(val9) / Convert.ToDecimal(cnt9);

            Console.WriteLine("{0} pairs of data read.", total);
            Console.WriteLine("The batting average for:");
            Console.WriteLine("   position 1 is {0}", Math.Round(avg1, 4));
            Console.WriteLine("   position 2 is {0}", Math.Round(avg2, 4));
            Console.WriteLine("   position 3 is {0}", Math.Round(avg3, 4));
            Console.WriteLine("   position 4 is {0}", Math.Round(avg4, 4));
            Console.WriteLine("   position 5 is {0}", Math.Round(avg5, 4));
            Console.WriteLine("   position 6 is {0}", Math.Round(avg6, 4));
            Console.WriteLine("   position 7 is {0}", Math.Round(avg7, 4));
            Console.WriteLine("   position 8 is {0}", Math.Round(avg8, 4));
            Console.WriteLine("   position 9 is {0}", Math.Round(avg9, 4));
        }
        catch (System.IO.FileNotFoundException) //file not present
        {
            Console.WriteLine("The file {0} was not found.", doc);
        }
        catch (System.IndexOutOfRangeException)
        {
            Console.WriteLine("Incomplete data pairs. Please re-check your data entries and retry.");
        }
        catch (System.FormatException) //bad data
        {
            Console.WriteLine("Invalid file.");
        }
        catch (System.ArgumentException) //null entry
        {
            Console.WriteLine("Make sure you enter a valid file name.");
        }
        catch (System.Exception exc) //any other exceptions
        {
            Console.WriteLine(exc.Message);
        }
    }
  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.IO;
班级计划
{
静态void Main(字符串[]参数)
{
控制台。写入(“击球平均数的数据文件在哪里?”);
字符串doc=Console.ReadLine();
int[]平均值=新int[9];
int val1=0,val2=0,val3=0,val4=0,val5=0,val6=0,val7=0,val8=0,val9=0;
int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6=0,cnt7=0,cnt8=0,cnt9=0;
尝试
{
StreamReader=新的StreamReader(文档);
变量行=File.ReadAllLines(doc);
int[]index=Array.ConvertAll(行,int.Parse);
//Console.WriteLine(行);//显示文本文件的内容
reader.Close();
对于(int i=0;i