Reputation: 321
I have a problem with C# read(){}
function. When I open and read my document it does not read the first line:
private static void read(string file, Konteineris butas)
{
using (StreamReader reader = new StreamReader(@file))
{
string line;
line = reader.ReadLine();
while (null != (line = reader.ReadLine()))
{
string[] values = line.Split(';');
int nr = Convert.ToInt16(values[0]);
double plotas = Convert.ToDouble(values[1]);
int kambariusk = Convert.ToInt16(values[2]);
int kaina = Convert.ToInt32(values[3]);
string tnr = values[4];
Apartaments apart = new Butas(nr,plotas,kambariusk,kaina,tnr); // array of apartaments
apartaments.addapartament(apart);
}
}
}
the text file:
1;25,4;1;25000;867467212 // skips this line...
2;26,4;2;100000;867467212
3;75,4;3;2100;867467212
4;65,4;4;15000;867467212
Upvotes: 2
Views: 1244
Reputation: 168
private static void read(string file, Konteineris butas)
{
using (StreamReader reader = new StreamReader(@file))
{
string line;
line = reader.ReadLine();
while (null != (line = reader.ReadLine()))
{
string[] values = line.Split(';');
int nr = Convert.ToInt16(values[0]);
double plotas = Convert.ToDouble(values[1]);
int kambariusk = Convert.ToInt16(values[2]);
int kaina = Convert.ToInt32(values[3]);
string tnr = values[4];
Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments
apartaments.addapartament(apart);
}
}
}
remove this. since your while condition does this already and you will jump over the first line based on this call. line = reader.ReadLine(); gives you a new line every time you call it. So in your while condition you get your second line without using your first.
way1:
private static void read(string file, Konteineris butas)
{
using (StreamReader reader = new StreamReader(@file))
{
string line;
while (null != (line = reader.ReadLine()))
{
string[] values = line.Split(';');
int nr = Convert.ToInt16(values[0]);
double plotas = Convert.ToDouble(values[1]);
int kambariusk = Convert.ToInt16(values[2]);
int kaina = Convert.ToInt32(values[3]);
string tnr = values[4];
Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments
apartaments.addapartament(apart);
}
}
}
way2:
private static void read(string file, Konteineris butas)
{
using (StreamReader reader = new StreamReader(@file))
{
string line;
while (line!=null)
{
line = reader.ReadLine();
string[] values = line.Split(';');
int nr = Convert.ToInt16(values[0]);
double plotas = Convert.ToDouble(values[1]);
int kambariusk = Convert.ToInt16(values[2]);
int kaina = Convert.ToInt32(values[3]);
string tnr = values[4];
Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments
apartaments.addapartament(apart);
}
}
}
Upvotes: 1
Reputation: 341
Because you do a line = reader.ReadLine(); then follow it up with the same code in the while loop, by the time it hits it's first iteration of the loop, it's already done a .ReadLine() twice, thus is on the second line of the file.
Remove the line = reader.ReadLine(); from the code and retry.
Upvotes: 1
Reputation: 177
Remove the first call to line = reader.ReadLine();
You are calling ReadLine() your loop, so you don't need it there.
Upvotes: 2