C#从文本文件整数加载数据

时间:2013-11-14 19:39:41

标签: c# string file load int

我在c#console中使用基于文本的RPG有一个小问题。

我已经制作了一个保存方法,但是当我想加载它时会给我一个错误..

这是我的加载代码:

(字符串不会出错,但问题从Level到Agility开始)

代码:

public static void LoadData ()
{
        // create reader & open file
        TextReader tr = new StreamReader("SavedGame.txt");

        // read lines of text
        string xCoordString = tr.ReadLine();
        string yCoordInt= tr.ReadLine();

        //Convert the strings to int
        Name = Convert.ToString(xCoordString);
        PlayerType = Convert.ToString (xCoordString);
        Level = Convert.ToString(xCoordString);
        HP = Convert.ToInt32(yCoordInt);
        Strenght = Convert.ToInt32(yCoordInt);
        Intelligence = Convert.ToInt32(yCoordInt);
        Agility = Convert.ToInt32(yCoordInt);
        // close the stream
        tr.Close();
}

5 个答案:

答案 0 :(得分:0)

无论您的变量被读入什么内容都无法转换为int。您可能必须删除换行符/回车符,或者只是简单的数据不是数字。在尝试转换之前,您应该对其进行测试和/或消毒。

答案 1 :(得分:0)

我不知道你在做什么

           string xCoordString = tr.ReadLine();
            //Convert the strings to int
           Name = Convert.ToString(xCoordString);

为什么你将字符串转换为字符串???

所以你读了字符串,那么你应该拆分它

           string[] s = xCoordString .Split(' ');

然后

           var firstVariable=s[0];
           var secondVariable=s[1];

等等。这应该对你有帮助 C# Splitting Strings?

还有一个:使用

        int.Parse(string value)  

希望我的回答能帮到你。祝你好运!

答案 2 :(得分:0)

您可能希望使用TryParse(String, Int32)检查解析是否成功,并执行某些操作(如设置默认值或通知用户)是否成功。

您可以清理输入字符串,然后解析它:

private static int ParseNumber(string input)
{
             string cleanedInput = input.Where(c => char.IsDigit(c)).ToString();
             int result;
             if (!Int32.TryParse(cleanedInput, out result))
             {
                Console.WriteLine("An error occured..");
             }
     return result;

}

并使用Agility = ParseNumber(input)

答案 3 :(得分:0)

您没有正确解析保存文件。如果这是您的保存文件的格式:

Stefano 
Knight 
1 
100 
3 
3 
3

然后你需要迭代地读取每一行并将读入的值解析为变量,如下:

string line = string.Empty;

//Convert the strings to int
line = tr.ReadLine();
Name = line;
line = tr.ReadLine();
PlayerType = line;
line = tr.ReadLine();
Level = Convert.ToInt32(line);
line = tr.ReadLine();
HP = Convert.ToInt32(line);
line = tr.ReadLine();
Strenght = Convert.ToInt32(line);
line = tr.ReadLine();
Intelligence = Convert.ToInt32(line);
line = tr.ReadLine();
Agility = Convert.ToInt32(line);

当然,有更好的方法来管理您的保存文件数据,但这应该会告诉您解析不起作用的原因。

答案 4 :(得分:0)

你可以循环遍历这样的行,但是你需要确定它是哪个属性并相应地对待它。

 TextReader tr = new StreamReader("SavedGame.txt");


 string charInfo;
 while ((charInfo = tr.ReadLine()) != null)
 {
     //parse the line and put into appropriate variable.
 }