无法理解在C#中阅读文本文件

时间:2015-04-24 19:54:08

标签: c# file-handling

所以我在大学一年级时,Visual Studio中的C#是六个模块之一。

基本上我的问题是,我需要读取.txt文件中的值并从该值计算佣金。

.txt文件包含:

1,Pat Ryan,280
2,Mary Smith,300
3,Tom Lynch,20

每一行的第三个值是我需要计算的佣金,但我无法理解这个值,因为你不能用我们目前使用的代码选择一个值,你需要通过每一行才能到达下一行。

This is到目前为止我所做的一切。我试着用这种方式进行计算:

if (columns [0] < 1000) {commission = column[0] * .05}

但是得到一个错误:

  

&#34;运营商&#39;&lt;&#39;不能应用于&#39; string []&#39;类型的操作数和&#39; int&#39;&#34;

非常感谢任何帮助!

static void salesReport() 
{
    string path =  "sales.txt";
    FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);

    StreamReader salesReport = new StreamReader(fs);

    string inputText = salesReport.ReadLine();

    Console.WriteLine("{0,-15}{1,-30}{2,-20}\n", "Number","Name","Sales");

    while (inputText != null)
    {
        string[] columns = new string [3];

        columns = inputText.Split(',');

        Console.WriteLine("{0,-15}{1,-30}{2,-10}\n", columns[0], columns[1], columns[2]);

        inputText = salesReport.ReadLine();
    }
}

4 个答案:

答案 0 :(得分:5)

您无法在错误中指定的字符串和int之间执行比较操作。您需要将从文本文件中获得的值转换为int,然后进行比较。

if (Convert.ToInt32(columns[2]) < 1000) 
{
    commission = Convert.ToInt32(columns[2]) / .05;
}

看起来你想要第3列,我已将索引更改为2。

答案 1 :(得分:2)

这是一个尝试解析文件并执行所需操作的快速示例。这有很多不好的做法,例如我连接输出字符串的方式,但你应该明白这一点。

static void Main(string[] args)
{
    using (StreamReader reader = new StreamReader(@"C:\Path\To\File.txt"))
    {
        string line;

        while ((line = reader.ReadLine()) != null)
        {
            string[] stuff = line.Split(',');

            int id = Convert.ToInt32(stuff[0]);
            string name = stuff[1];
            int val = Convert.ToInt32(stuff[2]);

            double commission = (double)val * 0.05;

            Console.WriteLine(name + "'s Commission: " + commission.ToString());
        }
    }
}

答案 2 :(得分:0)

试试这个

if (int.Parse(columns[0]) < 1000) {commission = int.Parse(columns[0]) * .05}​

答案 3 :(得分:0)

您的问题是您没有评估整数。您正在尝试在split操作后将比较运算符应用于字符串表示。

我添加了一个方法safeToInt,如果字符串不是int,它将阻止讨厌的异常。当然,如果你想知道这些错误,你应该直接使用Int32.TryParse并评估布尔结果。

我没有更改您的代码以使用我为您添加的方法:-)您应该能够解决这个问题。

static void salesReport() {
    string path =  "sales.txt";
    FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
    StreamReader salesReport = new StreamReader(fs);
    string inputText = salesReport.ReadLine();
    Console.WriteLine("{0,-15}{1,-30}{2,-20}\n", "Number","Name","Sales");
    while (inputText != null) {
        string[] columns = new string [3];
        columns = inputText.Split(',');
        Console.WriteLine("{0,-15}{1,-30}{2,-10}\n", columns[0], columns[1], columns[2]);
        inputText = salesReport.ReadLine();
    }
}

static int safeToInt(string input, int defaultValue = 0){
    int result = 0;
    if(Int32.TryParse(input, out result)){
        return result;
    }

    return defaultValue;
}