请教各位C#高手!
小弟初学C#,有一道题想问各位高手就是我做了一个WinForms界面,输入完信息之后保存在Customer.txt文件中使用StreamWriter写入文件,写入没问题,但是我想在用户输入一个姓名后点击搜索按钮就能从文本文件中查找相应人的信息,请问各位高手如何实现呢?最好能提供一段简单的代码,谢谢! --------------------编程问答-------------------- 所有用户的信息都在Customer.txt文件中吗?
一个用户一行纪录? --------------------编程问答-------------------- 是这样的一个客户有如下记录
姓名
地址
电话
我想通过文本框输入的姓名搜索客户的信息 --------------------编程问答-------------------- 我明白你的意思,我的意思是用户有很多吧,是不是所有的用户信息都存在Customer.txt文件中?
你写入文件的时候格式是怎么样的? --------------------编程问答-------------------- 你只能挨行的读取数据然后对比,用个access吧 --------------------编程问答-------------------- 一个一个记录的写如 --------------------编程问答-------------------- 最好用XML文件,估计会好用些,楼主可以自己去试试
private void btnQuery_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
lbEmail.Text = doc.SelectSingleNode("//User[Name='"+ddlName.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText;
} --------------------编程问答-------------------- 小弟初学,还没有学习过XML谢谢 --------------------编程问答-------------------- 如果是文本文件,肯定要逐行搜索,如果是xml文件,可以使用xpath查找 --------------------编程问答-------------------- 请问如何逐行搜索呢
以下是我添加文本的代码
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;
using System.Collections;
namespace Test2
{
public partial class Form1 : Form
{
private StreamWriter sw;
private Hashtable ht;
public Form1()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
if (File.Exists(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt"))
{
sw = File.AppendText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
else
{
sw = File.CreateText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
//将对象封装在Hashtable中
ht = new Hashtable();
ht.Add("姓名", this.txtName.Text);
ht.Add("住址", this.txtAddress.Text);
ht.Add("电话", this.txtTel.Text);
//写入文本文件
foreach (DictionaryEntry de in ht)
{
try
{
sw.WriteLine("{0} : {1}", de.Key.ToString(), de.Value.ToString());
sw.WriteLine();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
sw.Close();
MessageBox.Show("客户信息添加成功!");
}
}
} --------------------编程问答--------------------
--------------------编程问答-------------------- 不行啊,查询不到 --------------------编程问答-------------------- 为什么查询不到?
StreamReader sr = new StreamReader("文件的路径");
while (!sr.EndOfStream)
{
string name = sr.ReadLine();
if (name == "要查询的名字")
{
tbAddress.Text=sr.ReadLine();
tbPhone.Text=sr.ReadLine();
}
}
把你的查询代码发上来看看 --------------------编程问答-------------------- accp现在不是都5.0了么 --------------------编程问答-------------------- private void btnSearch_Click(object sender, EventArgs e)
{
MessageBox.Show(this.txtName.Text);
StreamReader sr = new StreamReader(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
//获得用户输入的名字
while (!sr.EndOfStream)
{
string name = sr.ReadLine();
if (name == this.txtName.Text)
{
this.txtAddress.Text = sr.ReadLine();
this.txtTel.Text = sr.ReadLine();
}
}
} --------------------编程问答-------------------- 完整版的
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;
using System.Collections;
namespace Test2
{
public partial class Form1 : Form
{
private StreamWriter sw;
private Hashtable ht;
public Form1()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
if (File.Exists(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt"))
{
sw = File.AppendText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
else
{
sw = File.CreateText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
//将对象封装在Hashtable中
ht = new Hashtable();
ht.Add("姓名", this.txtName.Text);
ht.Add("住址", this.txtAddress.Text);
ht.Add("电话", this.txtTel.Text);
//写入文本文件
foreach (DictionaryEntry de in ht)
{
try
{
sw.WriteLine("{0} : {1}", de.Key.ToString(), de.Value.ToString());
sw.WriteLine();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
sw.Close();
MessageBox.Show("客户信息添加成功!");
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnSearch_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
while (!sr.EndOfStream)
{
string name = sr.ReadLine();
if (name == this.txtName.Text)
{
this.txtAddress.Text = sr.ReadLine();
this.txtTel.Text = sr.ReadLine();
}
}
}
}
} --------------------编程问答-------------------- 把 if (name == this.txtName.Text)
改成 if (name.Contains(this.txtName.Text)) --------------------编程问答-------------------- 为什么没有查找到电话呢? --------------------编程问答-------------------- 因为你写的时候多sw.WriteLine()了一次 --------------------编程问答--------------------
要么把sw.WriteLine()去掉
要么在读文件的时候在
this.txtAddress.Text = sr.ReadLine();
this.txtTel.Text = sr.ReadLine();
中间再加一个sr.ReadLine(); --------------------编程问答-------------------- using System.Collections.Generic;
private void btnAdd_Click(object sender, EventArgs e)--------------------编程问答-------------------- 我记得是个20分的题,怎么变100分了? --------------------编程问答-------------------- 以行为单位存储是关键 下面是我做过的一个例子的 逐行检索想要的信息
{
StreamWriter sw = null;
try
{
if (File.Exists(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt"))
{
sw = File.AppendText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
else
{
sw = File.CreateText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
Dictionary<string, string> ht = new Dictionary<string, string>();
ht.Add("姓名", this.txtName.Text);
ht.Add("住址", this.txtAddress.Text);
ht.Add("电话", this.txtTel.Text);
//写入文本文件
foreach (KeyValuePair<string, string> de in ht)
{
sw.WriteLine("{0} : {1}", de.Key, de.Value);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sw.Close();
MessageBox.Show("客户信息添加成功!");
}
private void btnSearch_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
string name = sr.ReadLine();
while (!string.IsNullOrEmpty(name))
{
if (name.Split(':')[1].Trim() == this.txtName.Text.Trim())
{
this.txtAddress.Text = sr.ReadLine().Split(':')[1].Trim();
this.txtTel.Text = sr.ReadLine().Split(':')[1].Trim();
}
name = sr.ReadLine();
}
}
frmSelect fs=new frmSelect();
fs.ShowDialog();
string sele=fs.num+"\t";
StreamReader sr=new StreamReader("E:\\Employee.txt");
string a;
al=new ArrayList();
while(true)
{
a=sr.ReadLine();
if(a==null)
{
break;
}
al.Add(a);
}
sr.Close();
string nam="";
for(i=0;i<al.Count;i++)
{
nam=al[i].ToString().Substring(al[i].ToString().IndexOf(":")+1,al[i].ToString().IndexOf("姓名:")-al[i].ToString().IndexOf(":")-1);
if(nam==sele)
{
break;
}
}
string findinfor=(al[i].ToString());
this.txtNum.Text=findinfor.Substring(findinfor.IndexOf(":")+1,findinfor.IndexOf("\t姓名:")-findinfor.IndexOf(":")-1);
this.txtName.Text=findinfor.Substring(findinfor.IndexOf("姓名:")+3,findinfor.IndexOf("\t部门:")-findinfor.IndexOf("姓名:")-3);
this.txtPart.Text=findinfor.Substring(findinfor.IndexOf("部门:")+3,findinfor.IndexOf("\t工资:")-findinfor.IndexOf("部门:")-3);
this.txtPrice.Text=findinfor.Substring(findinfor.IndexOf("工资:")+3,findinfor.Length-findinfor.IndexOf("工资:")-3);
this.txtNum.ReadOnly=true;
this.btnUpdate.Enabled=true;
我这个例子 完整了对 文本信息的增删改查 如果需要其他部分的代码 可以联系我
我是小菜鸟! 说的不好清见谅, 希望能够帮到你! --------------------编程问答--------------------
StreamWriter sw = null;--------------------编程问答-------------------- 为什么不用INI文件呢???
try
{
if (File.Exists(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt"))
{
sw = File.AppendText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
else
{
sw = File.CreateText(@"E:\ACCP4.0-S2\C#\第十二章\Test2\Customer.txt");
}
Dictionary<string, string> ht = new Dictionary<string, string>();
ht.Add("姓名", this.txtName.Text);
ht.Add("住址", this.txtAddress.Text);
ht.Add("电话", this.txtTel.Text);
//写入文本文件
foreach (KeyValuePair<string, string> de in ht)
{
sw.WriteLine("{0} : {1}", de.Key, de.Value);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sw.Close();
INI文件算文本文件吧! --------------------编程问答-------------------- 这么多高手,学习了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 难道楼主的问题还没解决?
补充:.NET技术 , C#