Each line, as it is read from there source file, is also parsed and stored into an object. The leading integer on each line is stored as an int field in the object.
using System;
using System.Collections.Generic;
using System.IO;
class Line : IComparable<Line>
{
int _number;
string _afterNumber;
string _line;
public Line(string line)
{
// Get leading integer.
int firstSpace = line.IndexOf(' ');
string integer = line.Substring(0, firstSpace);
this._number = int.Parse(integer);
// Store string.
this._afterNumber = line.Substring(firstSpace);
this._line = line;
}
public int CompareTo(Line other)
{
// First compare number.
int result1 = _number.CompareTo(other._number);
if (result1 != 0)
{
return result1;
}
// Second compare part after number.
return _afterNumber.CompareTo(other._afterNumber);
}
public override string ToString()
{
return this._line;
}
}
class Program
{
static void Main()
{
List<Line> list = new List<Line>();
using (StreamReader reader = new StreamReader(
"c:\\p.txt"))
{
while (true)
{
string line = reader.ReadLine();
if (line == null)
{
break;
}
list.Add(new Line(line));
}
}
list.Sort();
foreach (Line value in list)
{
Console.WriteLine(value);
}
}
}
2 - pa
2 - zo
3 - ad
3 - za
23 - zo