1.准备工作
- 引入命名空间System.IO,因为这里面包含了我们要调用的读取文件的类StreamReader
2.举例
(1)待读取文件格式
(2)思路
- 实例化一个SteamReader,用完后最后记得关闭它
- 创建四个一维数组用来存放数据
- 使用SteamReader.ReadLine函数逐行读取数据
- 使用Split函数将其分割,将分割后的数组逐个对应存入刚才创建数组的中。
- 打印验证
(3)代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; //包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。
namespace CA_ReadText
{
class Program
{
static void Main(string[] args)
{
ReadFile();
Console.ReadKey();
}
static void ReadFile()
{
string fileName = @"D:\C#保存位置\Winforms\KaoyanReview\CA_ReadText\bin\Debug\data.txt";
var reader = new StreamReader(fileName);
string buf = reader.ReadLine(); //读取第一行,不需要,所以直接扔掉
//存储数据
int[] num = new int[4];
string[] siteName = new string[4];
double[] B = new double[4];
double[] L = new double[4];
//逐行读取并存储到数组中
for (int i = 0; i < 4; i++)
{
buf = reader.ReadLine();
var arrLine = buf.Split(' ');
num[i] = int.Parse(arrLine[0]);
siteName[i] = arrLine[1];
B[i] = Convert.ToDouble(arrLine[2]); //Method 1
L[i] = double.Parse(arrLine[3]); //Method 2
Console.WriteLine("{0},{1},{2},{3}", num[i], siteName[i], B[i], L[i]);//写出
}
reader.Close();
}
}
}
3.进阶
我不知道大家有没有发现上面的情况的不足之处,接下来我将自己觉得不足的地方跟大家分享并进行改正。
(1)问题
- 逐行读取写死了,也就是如果不是四行而是更多行,我们岂不是读不到4行之后的内容了
- 与上个问题对应的就是存储数据那四个数组的格式和大小写死了。
(2)我的思路
针对问题一,我们就使用另外一种循环使得它能够自动识别并读取到最后一行内容为止。针对问题二,我们可以创建一个结构体,使用List来存储,List可以动态的添加后删除数据。
(3)上代码
- 结构体
struct LineStruct
{
public int num;
public string siteName;
public double B;
public double L;
}
- 读取函数
static void ReadFilePro()
{
string fileName = @"D:\C#保存位置\Winforms\KaoyanReview\CA_ReadText\bin\Debug\data.txt";
List<LineStruct> list = new List<LineStruct>();
var reader = new StreamReader(fileName);
string buf = reader.ReadLine();//第一行舍弃
while (!reader.EndOfStream)//读取到最后
{
buf = reader.ReadLine();
var line = buf.Split(' ');
var lineStruct = new LineStruct();
for (int i = 0; i < line.Length; i++)
{
switch (i)
{
case 0:
lineStruct.num = int.Parse(line[i]);
break;
case 1:
lineStruct.siteName = line[i];
break;
case 2:
lineStruct.B = double.Parse(line[i]);
break;
case 3:
lineStruct.L = double.Parse(line[i]);
break;
}
}
list.Add(lineStruct);
}
foreach (var item in list)
{
Console.WriteLine("{0} {1} {2} {3}", item.num, item.siteName,item.B,item.L);
}
reader.Close();
}
总结
当然了,我写的仍然有很多不足之处,还望各位多加指正。