Search code examples
c#streamreader

Parsing a file with strings and integers c#


I have been given a simple task, that I cannot seem to figure out how to accomplish it.

I have been given a text file that has both names and pay rate/hours of employees. The format is as follows:

Mary Jones
12.50 30
Bill Smith
10.00 40
Sam Brown
9.50 40

My task is to write a program that uses StreamReader to pull the data from a text file, then print the employees name, and calculate the total pay by multiplying the rate and hours.

I know how to split the line with a .Split method, however I can't seem to figure out how to seperate the names from the doubles/ints. My parse methods always come back with a format error because it reads the strings first. I am completely stuck.

Here is my code so far, any help or guidance would be appreciated.

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

namespace lab21
{
    class Program
    {
        static void Main(string[] args)
        {

            StreamReader myfile = new StreamReader("data.txt");
            string fromFile;

            do
            {
                fromFile = myfile.ReadLine();
                if (fromFile != null)
                {
                    string[] payInfo = fromFile.Split( );
                    double wage = double.Parse(payInfo[0]);
                    int hours = int.Parse(payInfo[1]);
                    Console.WriteLine(fromFile);
                    Console.WriteLine(wage * hours);
                }
            } while (fromFile != null);
        }
    }
}

Solution

  • Use Decimal.Parse and read two line:

    do
    {
        name = myfile.ReadLine();
        if (name != null)
        {
            // read second line
            var nums = myfile.ReadLine();
            if (nums != null)
            {
                string[] payNums = nums.Split(new[] {' '});
                Console.WriteLine("{0}: {1}", 
                                  name,
                                  Decimal.Parse(payNums[0])
                                  * Decimal.Parse(payNums[1]));
            }
        }
    } while (name != null);