How can I re-write this input/output files so that my input file is a comma delimited file (input.csv)?
Input file (input.csv):
Smith,John,87
Doe,Jane,93
Sacramanto,Bob,57
I'm a beginner and my teacher says we must use the line.indexOf() function.
// constant variables
const string INPUT_FILE = "input.txt";
const string OUTPUT_FILE = "output.txt";
// open the input file
StreamReader sr = new StreamReader(INPUT_FILE);
// fields used for input file
string? line = "";
string firstName = "", lastName = "";
double mark = 0;
// variables for calculating average
double total = 0, count = 0, avg = 0;
// read the first line of text from the input file
line = sr.ReadLine();
// continue to read until you reach end of file
while (line != null)
{
string [] values = line.Split(',');
// get firstName
firstName = line;
// read next line & get last name
line = sr.ReadLine();
lastName = line;
// read next line & get mark
line = sr.ReadLine();
mark = Convert.ToDouble(line);
Console.WriteLine(firstName ' ' lastName ": " mark);
// accumulate 'total' & increment 'count'
total = total mark;
count ;
// read the next line
line = sr.ReadLine();
}
//close input file
sr.Close();
avg = total / count;
Console.WriteLine("\nClass Average: " avg);
// open an output file
StreamWriter sw = new StreamWriter(OUTPUT_FILE);
sw.WriteLine(avg);
sw.Close();
CodePudding user response:
I think you made a little bit of confusion between line
and values
. line
contains the actual line, values
contains the separated values of the single line. You have to read the line once for each loop iteration. Try the code blelow
// constant variables
const string INPUT_FILE = "input.txt";
const string OUTPUT_FILE = "output.txt";
// open the input file
StreamReader sr = new StreamReader(INPUT_FILE);
// fields used for input file
string? line = "";
string firstName = "", lastName = "";
double mark = 0;
// variables for calculating average
double total = 0, count = 0, avg = 0;
// continue to read until you reach end of file
while (!sr.EndOfStream)
{
// read the first line of text from the input file
line = sr.ReadLine();
if (line != null)
{
string[] values = line.Split(',');
if (values.Count() == 3)
{
firstName = values[0];
lastName = values[1];
mark = double.Parse(values[2]);
total = mark;
count ;
}
}
}
//close input file
sr.Close();
avg = total / count;
Console.WriteLine("\nClass Average: " avg);
// open an output file
StreamWriter sw = new StreamWriter(OUTPUT_FILE);
sw.WriteLine(avg);
sw.Close();
CodePudding user response:
I put the parameters up, what I'm not sure about is whether it can be accumulated normally, thank you
public static void readandwriteCSV(string INPUT_FILEe,string OUTPUT_FILEe)
{
try{
// open the input file
StreamReader sr = new StreamReader(INPUT_FILEe);
// open an output file
StreamWriter sw = new StreamWriter(OUTPUT_FILE);
// fields used for input file
string? line = "";
string firstName = "", lastName = "";
double mark = 0;
// variables for calculating average
double total = 0, count = 0, avg = 0;
while((line = sr.readLine()) != null){
string[] values = line.split(",");
firstName = values[0];
lastName = values[1];
mark = double.Parse(values[2]);
total = mark;
count ;
}
//close input file
sr.Close();
avg = total / count;
Console.WriteLine("\nClass Average: " avg);
sw.WriteLine(avg);
sw.Close();
}catch(Exception e){
Console.WriteLine("An error occurred")
}
}