110,533
社区成员
发帖
与我相关
我的任务
分享
private struct REC
{
public int KEY;
public int SUBKEY;
public string NAME;
public override string ToString()
{
return string.Format("{0:00000000}{1:00}{2,-8}", KEY, SUBKEY, NAME);
}
}
private void recordToFile(List<REC> records, string filename)
{
StreamWriter vStreamWriter = new StreamWriter(filename,
false, Encoding.Default);
foreach(REC record in records)
vStreamWriter.WriteLine(record);
vStreamWriter.Close();
}
private void button1_Click(object sender, EventArgs e)
{
#region 读取记录
List<REC> recordsA = new List<REC>();
List<REC> recordsB = new List<REC>();
List<REC> recordsC = new List<REC>();
StreamReader vStreamReader = new StreamReader(@"c:\a.txt", Encoding.Default);
int existsKey = -1;
string vLine = string.Empty;
while ((vLine = vStreamReader.ReadLine()) != null)
{
REC record = new REC();
if (vLine.Length >= 8)
int.TryParse(vLine.Substring(0, 8), out record.KEY);
if (vLine.Length >= 10)
int.TryParse(vLine.Substring(8, 2), out record.SUBKEY);
record.NAME = vLine.Substring(10, vLine.Length - 10).TrimEnd(); // 去掉后补空格
if (recordsA.Count > 0 && existsKey != record.KEY && // KEY没有记录过
record.KEY == recordsA[recordsA.Count - 1].KEY) // 添加的记录Key已经存在
{
recordsB.Add(recordsA[recordsA.Count - 1]);
existsKey = record.KEY;
}
int i;
if (int.TryParse(record.NAME, out i))
recordsC.Add(record);
recordsA.Add(record);
//Console.WriteLine(record);// 调试用
}
vStreamReader.Close();
#endregion 读取记录
recordToFile(recordsB, @"c:\b.txt");
recordToFile(recordsC, @"c:\c.txt");
StreamWriter vStreamWriter = new StreamWriter(@"c:\d.txt",
false, Encoding.Default);
vStreamWriter.WriteLine(
string.Format("A的输入行数={0},B的输出行数={1},C的输出行数={2}",
recordsA.Count, recordsB.Count, recordsC.Count));
vStreamWriter.Close();
}