c# - 读取文本文件直到一个空格并存储多个值

标签 c# winforms

我正在创建一个应用程序来读取和显示 Pokemon 统计数据。目前,我有 6 个 txt 文件,每个统计数据一个。我有 6 个数组读取每个 txt 文件并在标签中显示每个统计信息。

我想将此信息压缩到一个文本文件中,用“”分隔每个统计数据,以便将每个 Pokemon 的数据保存在一行中。

当前代码,如果它有助于更​​好地解释这个想法:

using System;
using System.Windows.Forms;

using System.IO;

namespace Pokedex
{
    public partial class Pokedex : Form
    {
        public Pokedex()
        {
            InitializeComponent();
        }

        //Read stat data from text files into string arrays
        string[] HP = File.ReadAllLines("HP.txt");
        string[] Atk = File.ReadAllLines("Atk.txt");
        string[] Def = File.ReadAllLines("Def.txt");
        string[] SpAtk = File.ReadAllLines("SpAtk.txt");
        string[] SpDef = File.ReadAllLines("SpDef.txt");
        string[] Spe = File.ReadAllLines("Spe.txt");

        private void cbxPokemon_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Get array index of currently selected Pokemon
            int index = cbxPokemon.SelectedIndex;

            //Get integer values out of the string arrays for appropriate use
            int intHP = int.Parse(HP[index]);
            int intAtk = int.Parse(Atk[index]);
            int intDef = int.Parse(Def[index]);
            int intSpAtk = int.Parse(SpAtk[index]);
            int intSpDef = int.Parse(SpDef[index]);
            int intSpe = int.Parse(Spe[index]);

            //Update labels with stat values in string forme, could also assign intStat.ToString()
            lblDexNum.Text = (index + 1).ToString("d3");

            lblHP.Text = HP[index];
            lblAtk.Text = Atk[index];
            lblDef.Text = Def[index];
            lblSpAtk.Text = SpAtk[index];
            lblSpDef.Text = SpDef[index];
            lblSpe.Text = Spe[index];

            lblBST.Text = (intHP + intAtk + intDef + intSpAtk + intSpDef + intSpe).ToString();

            //Update bar width based on stat value
            barHP.Width = intHP;
            barAtk.Width = intAtk;
            barDef.Width = intDef;
            barSpAtk.Width = intSpAtk;
            barSpDef.Width = intSpDef;
            barSpe.Width = intSpe;

            //Disable Previous and Next buttons when they cannot be used
            if (index == 0) { btnPrev.Enabled = false; }
            else { btnPrev.Enabled = true; }

            if (index == cbxPokemon.Items.Count - 1) { btnNext.Enabled = false; }
            else { btnNext.Enabled = true; }
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            cbxPokemon.SelectedIndex -= 1;
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            cbxPokemon.SelectedIndex += 1;
        }
    }
}

理想情况下,该文件将包含 6 个统计数据,例如每行“100 90 80 70 60 50”,并存储每个值。

有没有一种简单的方法可以读取到一个空格,存储该值,并一直这样做直到行尾?

最佳答案

是的,这很容易做到。您可以使用 String.Split()将行分解为可解析部分的方法。

您可以像现在一样读取统计文件,除了您只需要读取一个文件而不是六个:

string[] lines = File.ReadAllLines("PokemonStats.txt");

然后,在您的 cbxPokemon_SelectedIndexChanged 方法中,您可以像这样检索 Pokemon 的统计数据:

//Get integer values out of the string for appropriate use
string line = lines[index];
string[] parts = line.Split(' ');

int intHP = int.Parse(parts[0]);
int intAtk = int.Parse(parts[1]);
int intDef = int.Parse(parts[2]);
int intSpAtk = int.Parse(parts[3]);
int intSpDef = int.Parse(parts[4]);
int intSpe = int.Parse(parts[5]);

当然,这是假设每行始终恰好有 6 个整数统计信息,并且它们都按特定顺序排列。

关于c# - 读取文本文件直到一个空格并存储多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36097696/

相关文章:

c# - ViewModel 中的 WPF 按钮样式 StaticResource 值?

c# - WCF 并行模拟

c# - 使用 SubmitChanges 创建 LINQ 事务

c# - Windows.Form 不会显示

c# - 容器形式的控件会覆盖子形式吗?

c# - 当类型已知时,类型 'T' 不能用作泛型类型或方法错误中的类型参数

c# - 如何使用 System.Speech 和 SAPI 5.3 向已加载的语法添加单词

c# - TreeNode 中的自动换行

vb.net - 确定动态创建的按钮上的单击类型(向右或向左)

c# - Windows.Forms DragLeave 事件意外触发