C#中怎样在.txt文件中查询文字

比如有下面的文本文档内容为:学号:200680011130年龄:22性别:男姓名:李洋大学语文:89高等数学:98大学英语:87大学物理:85数据结构:96学号:2006... 比如有下面的文本文档内容为:
学号:200680011130年龄: 22性别:男姓名: 李洋 大学语文:89高等数学: 98大学英语:87 大学物理:85 数据结构:96
学号:200680011130年龄: 22性别:男姓名: 李洋 大学语文:89高等数学: 98大学英语:87 大学物理:85 数据结构:96
学号:200680011128年龄: 22性别:男姓名: 李话 大学语文:89高等数学: 98大学英语:87 大学物理:85 数据结构:96
学号:2006年龄: 26性别:女姓名: 小花 大学语文:89高等数学: 85大学英语:98 大学物理:95 数据结构:96
学号:2006800年龄: 21性别:男姓名: 大武 大学语文:98高等数学: 96大学英语:98 大学物理:85 数据结构:87
要怎样编程实现按姓名和学号查询到这个学生,并用MessageBox.Show显示这个学生的信息,还有就是怎样编程实现按学号的升序排列以及按平均分的降序排列学生的信息,并保存到.txt文件中,以及怎样统计不及格学生的信息,还有就是修改某名学生的某门功课的分数.
怎样修改某门功课的成绩啊,比如要把高等数学的成绩修改后还要写入txt文件,还有就是怎样按学号升序以及按平均分降序排列学生的信息并保存到.txt文件中!
展开
 我来答
百度网友331112cc1
推荐于2016-08-01 · TA获得超过1310个赞
知道小有建树答主
回答量:1070
采纳率:100%
帮助的人:429万
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO; //加入命名空间

//代码不规范简便之处请见谅..我是初学者
//保存的文本文件的格式必须要按照程序的格式,否则会出错.. 科目的分数必须要占3个长度,如果不够三个长度要用空格占位
//保存分数的方法实在是没有思路了..
//程序的判断不是太严格,很多为空的判断都是没有写的,见谅
namespace text
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
FileStream fs;
StreamReader sr;
StreamWriter sw;
string[] subject ={ "大学语文", "高等数学", "大学英语", "大学物理", "数据结构" };
double[] score = new double[5];
string message = ""; //保存查询到的学员信息

//姓名单选
private void rdoName_CheckedChanged(object sender, EventArgs e)
{
if (this.rdoName.Checked == true)
{
txtName.Enabled = true;
}
else
{
txtName.Enabled = false;
txtName.Text = "";
}
}
//学号单选
private void rdoNo_CheckedChanged(object sender, EventArgs e)
{
if (this.rdoNo.Checked == true)
{
txtNo.Enabled = true;
}
else
{
txtNo.Enabled = false;
txtNo.Text = "";
}
}
#region 查询
private void btnSelect_Click(object sender, EventArgs e)
{
fs = new FileStream("info.txt", FileMode.Open); //文件在程序的bin\Debug下面 文件要保存为Unicode编码格式的 学号有相同的 已经修改过
sr = new StreamReader(fs);
string stuInfo = "";
string Search = "";
if (this.rdoName.Checked == true) //按姓名查询
{
Search = txtName.Text;
}else if (this.rdoNo.Checked == true) //按学号查询
{
Search = txtNo.Text;
}
if (rdoName.Checked==false&&rdoNo.Checked==false)
{
//如果两项都没有选中则不执行
}
else
{
while ((stuInfo = sr.ReadLine()) != null)
{
if (stuInfo.IndexOf(Search) != -1)
{
message = stuInfo;
MessageBox.Show(stuInfo); //显示消息
///////////启用分数的控件
textBox0.Enabled = true; //大学语文
textBox1.Enabled = true; //高等
textBox2.Enabled = true; //...
textBox3.Enabled = true;
textBox4.Enabled = true;
double[] scoretemp = new double[5];
//取得当前学员的分数
for (int i = 0; i < subject.Length; i++)
{
int index = stuInfo.IndexOf(subject[i]);
//向后面取三位,取到最后一个科目的是否会出错,但是在最后一个科目的分数之后添加一个空格占位即可解决
scoretemp[i] = Convert.ToDouble(stuInfo.Substring(index + subject[i].Length + 1, 3).Trim());
}
textBox0.Text =scoretemp[0].ToString();
textBox1.Text = scoretemp[1].ToString();
textBox2.Text = scoretemp[2].ToString();
textBox3.Text = scoretemp[3].ToString();
textBox4.Text = scoretemp[4].ToString();
break;
}
}
}

sr.Close();
fs.Close();
}
#endregion
#region 统计
private void btnCount_Click(object sender, EventArgs e)
{
int num = 0; //不及格的人数
fs = new FileStream("info.txt", FileMode.Open);
sr = new StreamReader(fs);

string stuInfo = "";

while ((stuInfo = sr.ReadLine()) != null)
{
//以下是循环取得每个学生的分数信息,并计算每个学生的总分,来计算不及格的人数
for (int i = 0; i < subject.Length; i++)
{
int index = stuInfo.IndexOf(subject[i]);
//向后面取三位,取到最后一个科目的是否会出错,但是在最后一个科目的分数之后添加一个空格占位即可解决
score[i] = Convert.ToDouble(stuInfo.Substring(index + subject[i].Length + 1, 3).Trim());
}
double zscore = 0; //总分
//由于您在问题中没有明确指出不及格的判定规则,我这里是按照平均分<60来计算的
foreach (double sc in score)
{
zscore += sc;
}
if (zscore / subject.Length < 60)
{
num++;
}
}
sr.Close();
fs.Close();
MessageBox.Show(string.Format("不及格的人数为:{0}人", num.ToString()));
}
#endregion
phoebuswei
2009-01-03 · TA获得超过608个赞
知道小有建树答主
回答量:707
采纳率:0%
帮助的人:668万
展开全部
先把文件用DataTable装载出来
然后再用DataTable.select("code=2006");
这样的方法就能进行查找了
应该是
File.Open ( 路径, FileMode.Open );
然后
DataTable dt = new DataTable ( "sadf" );
分割文件
string[] values = line.Split ( new char[] {'':''} );
循环添加入datatable
DataRow row = dt.NewRow();
for ( int num = 0 ; num < values.Length ; num++ )
row [ num ] = values [ num ];
dt.Rows.Add ( row );

先这样吧你要是还不会给我发邮件吧phoebus.wei@gmail.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xupeiying
2009-01-03 · TA获得超过468个赞
知道小有建树答主
回答量:553
采纳率:0%
帮助的人:563万
展开全部
文本只是一串没有任何格式的字符串,你非要用这种没有规定格式的容器,来格式的显示数据吗? xml,数据库还有就算ini文件也比txt好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Imporial
2009-01-03 · 超过22用户采纳过TA的回答
知道答主
回答量:96
采纳率:100%
帮助的人:62.2万
展开全部
把TXT文件加载到字符串中总知道吧,
然后分解为字符串数组,以\n为分隔符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
22...8@qq.com
2009-01-03 · TA获得超过412个赞
知道答主
回答量:341
采纳率:0%
帮助的人:155万
展开全部
用数据库查的我还是会做到 但是显示到.txt文件夹我就不会了 不好意思了 sorry
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式