我正在创建一个应用程序来读取和显示 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/